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

标签 c arrays pointers integer memory-address

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

相关文章:

java - 如何更改 2d ArrayList 中某些 ArrayList 的大小?

angularjs - 如何使用 Angular 附加表单字段以及如何在数据库中插入值

javascript - 访问多个 JSON 数组中的元素

c - 指向C中参数中指针的指针

指针的 C++ 帮助,尤其是 "->"运算符

c++ - 使用 int*& 通过引用传递指针会导致奇怪的问题

c - 从文件中分割字符串然后存储到结构中

c - 如何确定/测量具有位字段的结构的大小?

c - 如何获取自定义 ELF 部分的开始和结束地址?

c - 即使分配了大堆栈大小,如何消除堆栈溢出错误?