引用2 d数组

时间:2010-05-27 17:06:04

标签: c arrays 2d

请看这段代码: -

#include<stdio.h>
int main()
{
int arr[2][2]={1,2,3,4};
printf("%d %u %u",**arr,*arr,arr);
return 0;
}

当我编译并执行这个程序时,我得到了arr和* arr的相同值,它是2 d数组的起始地址。 例如: - 1 3214506 3214506

我的问题是为什么解除引用arr(* arr)不会打印存储在arr中包含的地址的值?

2 个答案:

答案 0 :(得分:5)

* arr是长度为2的类型整数数组,因此它与arr共享相同的地址。它们都指向数组的开头,这是同一个位置。

答案 1 :(得分:0)

在C中,2d数组在内存中没有表示为数组数组;相反,它是一个常规的1d数组,其中需要第一个给定的维度,以便在执行时计算数组中的正确偏移量。这就是为什么在多维数组中你总是需要指定除最后一个之外的所有维度(这不是必需的);例如,如果声明一个类似

的数组
int a[2][3][4];

数组将在内存中表示为总共2 * 3 * 4个元素的单个数组。试图访问位置(i,j,k)处的元素,实际上将被转换为访问普通数组中的元素3 * i + 4 * j + k。在某种意义上,需要初始维度来知道在1d数组中放置“行中断”的位置。