【发布时间】:2018-06-21 08:03:56
【问题描述】:
我编写了一个程序来理解 指针 的概念,我在其中声明了一个 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 位。为什么?
【问题讨论】:
-
你的处理器是什么?
-
英特尔酷睿 i3-2330M 处理器 2.20 GHz
-
对我来说,忽略所有编译器警告的代码显示:0、0、0、0、0 和 0。64 位大端万岁。使用 %p 显示指针。
标签: c arrays pointers integer memory-address