2

对于一维数组,我可以使用数组名称作为指针并为其添加偏移量以访问数组的每个元素。二维数组有类似的东西吗?

我定义了一个二维数组如下

int arr[2][3] = {{1,2,3}, {4,5,6}};

int** arrPtr = arr;

但第二行出现编译器错误。二维数组不应该有类型int**吗?

我在这里遇到了另一个线程:

C ++访问二维数组指针处的值

看到了这个:

2dArray = new int*[size];

有人可以告诉我是什么int*[size]意思吗?(size是一个int,我想)。

非常感谢。

4

2 回答 2

3

像您这样定义的多维数组只是一个指针,因为数据是按顺序编码的。因此,您可以执行以下操作:

int arr[2][3]={{1,2,3},{4,5,6}};
int* arrPtr = (int*)arr;

通常,指向元素 at 的指针arr[a][b]可以通过arrPtr + a*bSize + b其中 bSize 是第一个数组维度(在本例中为三个)的大小来访问。

您的第二个问题与动态内存分配有关 - 在运行时分配内存,而不是在程序启动时定义固定数量。我建议在使用动态分配的 2D 数组之前查看cplusplus.com上的动态内存分配。

于 2013-06-08T14:19:43.310 回答
1

int* array[10] 表示一个包含 10 个整数指针的数组。

您可以使用指向其第一个条目的简单指针访问二维数组,并利用空间位置原理进行一些数学运算。

int array[2][2] = {{1,2}, {3, 4}};
int* p = &array[0][0];
for(int i=0; i<2*2; i++)
   printf("%d ", *(p++));

如果你有一个矩阵:

 1 2
 3 4

在内存中,它按顺序编码为 1 2 3 4 ;)

于 2013-06-08T14:11:05.373 回答