使用 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]+1
和 array[1]
会产生不同的地址。 array[0]+1
打印 array[0]
+ 4 处的地址,这是预期的,因为整数的大小为 4 个字节。但这与 array[1]
不同。为什么会这样?直觉难道不会表明在固定大小的数组上使用 malloc 将使程序员能够引用使用数组表示法(即 array[i])分配的内存吗?
array[0]
是一个 int[2]
。当传递给函数时,它会衰减为指向第一个元素的指针,一个 int
,在您的系统上是 4 个字节。
array[0] + 1
将 sizeof(int)
添加到指针。
array[1]
是下一个int[2]
(越界)。那是 sizeof(int)
的两倍。
我有这个简单的代码:
#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]+1
和 array[1]
会产生不同的地址。 array[0]+1
打印 array[0]
+ 4 处的地址,这是预期的,因为整数的大小为 4 个字节。但这与 array[1]
不同。为什么会这样?直觉难道不会表明在固定大小的数组上使用 malloc 将使程序员能够引用使用数组表示法(即 array[i])分配的内存吗?
array[0]
是一个 int[2]
。当传递给函数时,它会衰减为指向第一个元素的指针,一个 int
,在您的系统上是 4 个字节。
array[0] + 1
将 sizeof(int)
添加到指针。
array[1]
是下一个int[2]
(越界)。那是 sizeof(int)
的两倍。