(C에서) 값을 반환explaination 이중 별표 내가 배열이 배열에서
char *p[2][3] = {"abc","defg","gi","jklmno","pqrstuvw","xyz"};
을하고 난 다음 구문을 컴파일러 인쇄 이상한 값을 인쇄 할 때, 그리고 내가 이해하지 않은 이유 :
printf("%c", **p); // Print 'j'
printf("%c", *p[1]); // Print 'v'
감사합니다.
(C에서) 값을 반환explaination 이중 별표 내가 배열이 배열에서
char *p[2][3] = {"abc","defg","gi","jklmno","pqrstuvw","xyz"};
을하고 난 다음 구문을 컴파일러 인쇄 이상한 값을 인쇄 할 때, 그리고 내가 이해하지 않은 이유 :
printf("%c", **p); // Print 'j'
printf("%c", *p[1]); // Print 'v'
감사합니다.
배열의 초기화가 잘못되었습니다. 당신이 2 차원 배열을 만들려고하고 있기 때문에, 일부 괄호가 누락되었습니다 :
printf("%s", **p); //abc
printf("%s", *p[1]); //jklmno
당신은 역 참조 연산자를 사용하지 않아야합니다 :
char *p[2][3] = {{"abc","defg","gi"},{"jklmno","pqrstuvw","xyz"}};
지정자의 배열을 인쇄하는 데 사용되어야한다 직접. 항상 배열 첨자 연산자를 사용하십시오.
printf("%s", p[0][0]); //abc
printf("%s", p[1][0]); //jklmno
은 기본적으로 당신이 한 일은 당신에게 제공 문자열의 2 개 차원 배열 생성 :
*p[0] = {"abc","defg","gi"};
*p[1] = {"jklmno","pqrstuvw","xyz"};
** p는 * 피에서 첫 번째 단어의 주소를 가리 킵니다 [0] "ABC"인을, printf ("% c", ** p)를 호출 할 때 실제로 "abc"라는 메모리 주소를 문자로 표시하려고하므로 임의의 결과가 표시됩니다.
printf("%d\n", **p);
printf("%d\n", *p[1]);
의 printf 호출 "jklmno" "ABC"를의 주소입니다 포인터 값을 표시합니다 exemple 당이 대신 할 그러나 만약 내가 @ 및 L.를 얻을 코드를 실행할 수 있습니다.
printf("%s\n", **p);
printf("%s\n", *p[1]);
당신은이에 의해 ** P는 메모리 주소에서 지적 문자열을 읽고하도록되어 있음을 이해할 것이다 printf와 같이 표시 "ABC"와 "jklmno"가 표시됩니다
* P는 [: 지금 당신은이 작업을 수행하는 경우 1]. 또한 ** p는 * p [0]와 같습니다. 첫 번째 배열의 첫 번째 문자열의 첫 번째 문자를 표시하려면 다음을 호출하십시오.
printf("%c\n", ***p); // ***p is the same as p[0][0][0]
희망이 있습니다.
데이터 유형을 확인하십시오. –
인쇄하고자하는 것이 확실하지 않지만'** p'는'char *'유형이므로, 첫 번째 문자열의 첫 번째 문자를 인쇄하려는 경우'*** p'가 그 문자입니다. 마찬가지로 두 번째 문장에서 두 번째 문자열 행에서 주먹 문자를 인쇄하려는 경우'** p [1]'이 원하는 문자열이됩니다. –
컴파일 할 때 항상 모든 경고를 활성화 한 다음 해당 경고를 수정하십시오. 예를 들어 컴파일러는 이니셜 라이저에 '{'와 '}'중괄호가 누락되었다고 알려줍니다. – user3629249