所以我正在研究数组和指向数组的指针,我发现了这段代码。 我想知道为什么最后一个地址是FE14,它不是应该是第一个元素的地址加上(数据类型的大小)4,所以我应该是FE04?
#include <stdio.h>
int main()
{
int arr[5];
printf("%p\n",arr); //----> the output FE00
printf("%p\n",arr+1); //----> the output FE04
printf("%p\n",&arr); //----> the output FE00
printf("%p\n",&arr+1); //----> the output FE14
}
最佳答案
这很令人困惑,因为 C 数组可以退化为指针表达式。
对于arr
和arr+1
,指针的数据类型是int
,在你的系统上是4个字节,这就是为什么您会看到 FE00
和 FE04
之间存在 4 个字节的差异。
对于&arr
和&arr+1
,指针的数据类型是int[5]
,即20个字节,因此为什么您会看到 FE00
和 FE14
相差0x14
,即:
1 * 16^1 + 4 * 16^0
= 1 * 16 + 4 * 1
= 16 + 4
= 20
如果将 int arr[5]
的大小从 5 个整数长度更改为 500,您会发现 &arr
和 &arr+1
.
关于arrays - 使用 array_name 和 &array_name 的地址之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65171803/