我可以使用C ++中的指针访问2D数组的元素吗?

时间:2013-06-08 14:05:44

标签: c++ multidimensional-array

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

我定义了一个2D数组如下

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

int** arrPtr = arr;

但是第二行出现了编译错误。 2D阵列不应该具有类型int**吗?

我在这里遇到另一个帖子:

C++ Accessing Values at pointer of 2D Array

并看到了这个:

2dArray = new int*[size];

有人可以告诉我int*[size]的含义吗? (我认为sizeint

非常感谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

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

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;)