使用 malloc 了解数组的内存分配行为

Understanding memory allocation behaviour for arrays using malloc

我有这个简单的代码:

#include<stdio.h> 
#include<stdlib.h> 

int main(){ 

int (*array)[2] = malloc(sizeof(int)*2);
    printf("%p\n",array[0]); //0x13c606700
    printf("%p\n",array[0]+1); //0x13c606704
    printf("%p", array[1]); //0x13c606708
}

我正在使用 malloc 为包含 2 个元素的整数数组分配内存。这个 returns 这个数组的指针。但是,我不明白为什么 array[0]+1array[1] 会产生不同的地址。 array[0]+1 打印 array[0] + 4 处的地址,这是预期的,因为整数的大小为 4 个字节。但这与 array[1] 不同。为什么会这样?直觉难道不会表明在固定大小的数组上使用 malloc 将使程序员能够引用使用数组表示法(即 array[i])分配的内存吗?

array[0] 是一个 int[2]。当传递给函数时,它会衰减为指向第一个元素的指针,一个 int,在您的系统上是 4 个字节。

array[0] + 1sizeof(int) 添加到指针。

array[1]是下一个int[2](越界)。那是 sizeof(int) 的两倍。