gpt4 book ai didi

c - 创建内部数组不需要 Malloc

转载 作者:太空宇宙 更新时间:2023-11-04 02:33:18 24 4
gpt4 key购买 nike

<分区>

我正试图完全围绕 malloc 和内存分配思考。我最近遇到了一个让我皱眉的情况。

当摆弄数组时,我正在创建一个数组数组。在我看来,这看起来像这样: [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], ...]这样做时我想因为我需要 malloc 来创建外部数组。我还需要为我正在创建的每个内部数组调用 malloc。我很快意识到,当我跳过这对我来说毫无意义的步骤时,我得到了相同的输出。

考虑以下脚本。

int main(int argv, char* argc[]){

// initialize outer array
int* outer = malloc(5 * sizeof(int));

int i, j;

// for each slot in outer array
// create a new array and assign it
// to that slot.
// NOT NEEDED.
for(i = 0; i < 5; i++){
int* inner = malloc(5 * sizeof(int));
*(outer + i) = *inner;
}
// If I comment out the above four lines
// the output remains the same.

// assign to each slot in each inner array
for(i = 0; i < 5; i++)
for(j = 0; j < 5; j++)
*(outer + i * 5 + j) = j;

// print each element in each inner array
for(i = 0; i < 5; i++){
for(j = 0; j < 5; j++){
printf(
"%d ",
*(outer + i * 5 + j)
);
}
puts("");
}
}

此脚本的输出如下:

0 1 2 3 4 
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4

这是我所期望的。但是当我注释掉脚本中的第一个 for 循环时,我得到了相同的输出。为什么是这样?我不需要为内部数组分配内存吗?显然答案是否定的,但我试图理解为什么会这样。

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