나는 다음과 같은 테스트 응용 프로그램이 있습니다C에서 char *가 char **와 동일하게 취급되는 이유는 무엇입니까?
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(void){
char buf[512];
buf[0]= 0x1;
buf[1]= 0x2;
char *temp1 = &buf;
char *temp2 = buf;
char *temp3 = &buf[0];
printf("temp1:%p, temp2:%p, temp3:%p\n",temp1,temp2,temp3);
printf("0 = %d, %d, %d\n",temp1[0],temp2[0],temp3[0]);
printf("1 = %d, %d, %d\n",temp1[1],temp2[1],temp3[1]);
return;
}
그것은 경고와 함께 컴파일 :
을하지만 그것을 실행할 때, 세 개의 포인터가 같은 동작합니다.
./testptr
temp1:0x7fff3a85f220, temp2:0x7fff3a85f220, temp3:0x7fff3a85f220
0 = 1, 1, 1
1 = 2, 2, 2
나는 buf == &buf[0]
,하지만 왜 &buf == &buf[0]
을한다는 것을 알아? &buf
은 char**
이 아니어야합니까?
'& buf'는 실제로'char (*) [512]'(512 항목'char' 배열에 대한 포인터)입니다. 그들은 거의 같지 않습니다. –
컴파일러 출력을 캡처하고 코드를 질문에 붙여 넣는 것 사이에서 코드를 변경했습니다. 문제는 9 번 라인에 있습니다. –
죄송합니다. 새 라인을 추가했습니다. – austinmarton