gpt4 book ai didi

与二维数组混淆

转载 作者:行者123 更新时间:2023-12-04 05:13:19 24 4
gpt4 key购买 nike

请考虑以下二维数组:

int array[2][2] = {
{1,2},
{3,4}
};

据我了解:- 'array' 表示二维数组的基地址(与数组第一个元素的地址相同,即 array[0][0])。

  • 二维数组在内存中的实际排列就像一个大的一维数组。

  • 现在,我知道基地址 = 数组。因此,我应该能够到达包含元素的内存块:array[0][0]。

  • 如果我忘记了二维数组并尝试将此数组视为简单的一维数组:array[0] = *(array+0) 给出第一个数组的基地址而不是元素 array[0][0]。为什么?

  • 二维数组不存储任何内存地址(如指针数组)。

  • 如果我知道基地址,我一定能够访问作为线性一维数组的内存。

请帮我澄清一下这个疑惑。

谢谢。

最佳答案

array[0] 是一维数组。它的地址与array的地址相同,与array[0][0]的地址相同:

assert((void*)&array == (void*)&(array[0]));
assert((void*)&array == (void*)&(array[0][0]));

因为 array[0] 是一个数组,你不能将它赋给一个变量,也不能将它传递给一个函数(如果你这样做,你将传递一个指向第一个元素)。您可以通过查看 (array[0])[0](array[0])[1](括号是多余的)观察到它是一个数组。

printf("%d %d\n", (array[0])[0], (array[0])[1]);

你可以观察到它的大小是2个int对象的大小。

printf("%z %z %z\n", sizeof(array), sizeof(array[0]), sizeof(array[0][0]));

这是表示内存布局的图表:

+-------------+-------------+-------------+-------------+
| 1 | 2 | 3 | 4 |
+-------------+-------------+-------------+-------------+
`array[0][0]' `array[0][1]' `array[1][0]' `array[1][1]'
`---------array[0]---------' `---------array[1]---------'
`-------------------------array-------------------------'

关于与二维数组混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12287112/

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