【发布时间】:2009-12-04 08:20:45
【问题描述】:
下面发生的事情不是数组名总是指向 C 中第一个元素的指针吗?
int myArray[10] = {0};
printf("%d\n", &myArray); /* prints memadress for first element */
printf("%d\n", myArray); /* this prints a memadress too, shows that the name is a pointer */
printf("%d\n",sizeof(myArray)); /* this prints size of the whole array, not a pointer anymore? */
printf("%d\n",sizeof(&myArray)); /* this prints the size of the pointer */
【问题讨论】:
-
为了
printf指针值你应该使用%p格式说明符。您正在使用%d,这是完全没有意义的事情。 -
C 常见问题解答似乎已关闭,但您谷歌“c 常见问题解答数组”并访问缓存版本。
-
@AndreyT 你是什么意思没有意义,你用 %d 得到十进制,用 %p 得到十六进制,对,但你的意思可能是内存按 def 是十六进制的?
-
指针是与整数(或长整数)不同的数据类型,并且可能具有不适合以整数格式显示的内部结构。示例:在 386 上的 Turbo C 中,指针是段:偏移量(即 2 个整数)并具有特殊格式,带有 %p;使用 %d 输出会失败或隐藏一些信息。
-
而在 x86_64 上,%p 想要一个 8 字节的数据类型,而 %d 只有 4 个字节。