我有以下的测试程序:为什么char *在C中被当作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