У меня есть следующее тестовое приложение:
#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;
}
Компилируется с предупреждением:
gcc ./testptr.c -o testptr
./testptr.c: In function ‘main’:
./testptr.c:9: warning: initialization from incompatible pointer type
Но когда я запускаю его, все три указателя ведут себя одинаково.
./testptr
temp1:0x7fff3a85f220, temp2:0x7fff3a85f220, temp3:0x7fff3a85f220
0 = 1, 1, 1
1 = 2, 2, 2
Я знаю, что buf == &buf[0]
, но почему &buf == &buf[0]
? Разве &buf
не должен быть char**
?