2D阵列中数据类型的混淆
发布时间:2020-12-16 05:21:06 所属栏目:百科 来源:网络整理
导读:这是一个代码,用于打印2D数组的第一个元素的地址,然后添加1.尽管所有4个基址都相同,但由于它们的“类型”不同,它们的加法显然不会给出相同的结果.我可以找出一些类型(如果它们是正确的)但不是全部. int main(){ int array[4][3]; printf("array %un",array)
这是一个代码,用于打印2D数组的第一个元素的地址,然后添加1.尽管所有4个基址都相同,但由于它们的“类型”不同,它们的加法显然不会给出相同的结果.我可以找出一些类型(如果它们是正确的)但不是全部.
int main() { int array[4][3]; printf("array %un",array); //of type int(*)[3] printf("array+1 %un",array+1); printf("&array %un",&array); //....??? printf("&array+1 %un",&array+1); printf("array[0] %un",array[0]); //of type int* printf("array[0]+1 %un",array[0]+1); printf("&array[0] %un",&array[0]); //....??? printf("&array[0]+1 %un",&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数组[4] [3];以下适用
array是一个包含4个元素的数组.每个元素都是一个包含3个整数的数组.在大多数情况下,使用名称本身会使数组衰减为指向其第一个元素的指针;然后数组成为指向3个int数组的指针 数组1是指向3个int的数组的指针.这里数组衰减到指针,1指向3 int的数组 & array是整个数组的地址.它指向4个数组的数组的类型为3个int的对象 & array 1是4个3个数组的数组的伪数组的第2个(实际上不存在)元素 array [0]是一个3个整数的数组.它通常衰减到指向第一个元素的指针 array [0] 1指向数组[0]中的第二个int & array [0]类型为3 int的数组对象的地址 & array [0] 1 3个int数组的第2个元素 PS.午饭后我会尝试画一幅画(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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |