我编写了一个程序来理解指针的概念,其中我声明了一个由5个整数指针组成的数组,然后我尝试打印该指针的各个索引的地址大批。但我不明白的是,为什么输出中 8 位索引的连续地址与 4 位索引的连续地址之间存在差异?
我的代码是:
#include<stdio.h>
void main()
{
int i;
int *b[5];
for(i = 0; i < 5; i++){
b[i] = (int *) malloc(10 * (sizeof(int)));}
printf(" b = %u \n\n",b);
printf(" (b+1) = %u \n\n", (b+1));
printf(" (b+2) = %u \n\n", (b+2));
printf(" *(b+2) = %u \n\n", *(b+2));
printf(" *(b+2)+3) = %u \n\n", *(b+2) + 3);
*(*(b+2) + 3) = 5;
printf(" b[2][3] = %u \n\n", b[2][3]);
}
输出如下
b = 79107440
(b+1) = 79107448
(b+2) = 79107456
*(b+2) = 3293532864
*(b+2)+3) = 3293532876
b[2][3] = 3293533008
显然 (b+1) 和 b 之间的差异为 8 位。为什么?
最佳答案
首先,地址以字节为单位,而不是位。其次,为什么差异是 8 字节,这是因为您所在的系统使用 64 位(8 字节)地址。
关于c - 为什么 int *b[5] 形成 8 位的差异而不是 4 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50963398/