gpt4 book ai didi

c - 为什么 int *b[5] 形成 8 位的差异而不是 4 位?

转载 作者:行者123 更新时间:2023-11-30 18:19:32 25 4
gpt4 key购买 nike

我编写了一个程序来理解指针的概念,其中我声明了一个由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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com