#include <stdio.h>
int main(){
char *a[5];
printf("%p\n", (&a[0]));
printf("%p\n", (&a[1]));
return 0;
}
示例输出:
0xbf9343dc
0xbf9343e0
执行此操作时,输出不应该是表单中的内容:
0x0....0
0x0....1
因为char指针的大小应该是1(在我使用的32位系统上)。
如果有人知道为什么会这样,可以提供解释,那将非常有帮助
答案 0 :(得分:7)
char
的大小为1
,char *
的大小取决于实现,通常4
位系统中的32
。
答案 1 :(得分:3)
如果声明char数组而不是char *数组,那么您将获得预期的结果。请注意第char a[5]
行。
$ cat foo.c
#include <stdio.h>
int main(){
char a[5];
printf("%p\n", (&a[0]));
printf("%p\n", (&a[1]));
return 0;
}
$ foo
0x7fff5e1119d7
0x7fff5e1119d8
char a[5]
包含5个字符。 char *a[5]
持有5个字符指针。