gpt4 book ai didi

二维数组中数据类型的混淆

转载 作者:太空狗 更新时间:2023-10-29 17:18:07 24 4
gpt4 key购买 nike

这是一个代码,它打印二维数组的第一个元素的地址,然后加 1。虽然所有 4 个基地址都相同,但由于它们的不同,它们与 1 的加法显然不会给出相同的结果类型”。我可以找出某些类型(如果它们是正确的)但不是全部。

int main()
{
int array[4][3];
printf("array %u\n",array); //of type int(*)[3]
printf("array+1 %u\n",array+1);
printf("&array %u\n",&array); //....???
printf("&array+1 %u\n",&array+1);
printf("array[0] %u\n",array[0]); //of type int*
printf("array[0]+1 %u\n",array[0]+1);
printf("&array[0] %u\n",&array[0]); //....???
printf("&array[0]+1 %u\n",&array[0]+1);
}

您能否详细解释每个基地址的“类型”,以便理解加 1 后涉及的指针运算。下面给出了 gcc 机器的示例输出以供快速引用。

array       3214383040 
array+1 3214383052
&array 3214383040
&array+1 3214383088
array[0] 3214383040
array[0]+1 3214383044
&array[0] 3214383040
&array[0]+1 3214383052

最佳答案

具有 int array[4][3]; 以下内容适用

array 是一个包含 4 个元素的数组。每个元素都是一个包含 3 个 int 的数组。在大多数情况下,单独使用名称会使数组衰减为指向其第一个元素的指针;然后 array 成为指向 3 个 ints

数组的指针

array + 1 是指向 3 个整数的数组的指针。这里 array 衰减为指针,1 指的是 3 int

的数组

&array 是整个数组的地址。它指向 4 个 3 个整数的数组类型数组的对象

&array + 1pseudo-array of 4 arrays of 3 ints

的第二个(实际上不存在)元素

array[0] 是一个包含 3 个整数的数组。它通常衰减为指向第一个元素的指针

array[0] + 1 指向array[0]中的第2个int

&array[0] 3 整数类型数组对象的地址

&array[0]+1 3 个整数数组的第二个元素

附言。午饭后我会尝试画一幅图 (ASCII)。


嗯...绘图很难:)

在尝试之前,我认为我可以画出更好的图。这是我能想到的最好的...

    int array[4][3]        ........[aaabbbcccddd]........                              where aaa, bbb, ccc, ddd are arrays of 3 ints'    the [] represent the object itself; the {} represent pointers.    array (object)         ........[AAABBBCCCDDD]........       int[4][3]    array (decayed)    ==> ........{aaa}bbbcccddd........       int(*)[3]    array + 1          ==> ........aaa{bbb}cccddd........       int(*)[3]    &array             ==> ........{aaabbbcccddd}........       int(*)[4][3]    &array + 1         ==> ........aaabbbcccddd{xxxxxxxxxxxx}........       int(*)[4][3]    array[0] (object)      ........[AAA]bbbcccddd........       int[3]    array[0] (decayed) ==> ........{a}aabbbcccddd........       int*    array[0] + 1       ==> ........a{a}abbbcccddd........       int*    &array[0]          ==> ........{aaa}bbbcccddd........       int(*)[3]    &array[0] + 1      ==> ........aaa{bbb}cccddd........       int(*)[3]

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

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