声明多维数组:指针或数组定义

时间:2011-11-04 06:14:23

标签: c arrays multidimensional-array

声明多维数组之间有什么区别:

int a[5][5];

或者

int* a[5];

哪一个更好用?感谢。

4 个答案:

答案 0 :(得分:1)

可以用于声明二维数组。

在第一种情况下,25个int元素分配在内存中的连续区域中。 在这种情况下,表达式a[i][j]由编译器转换为*(a + i*5 + j)

第二个分配5个指向int的指针。您可以通过分配int的向量并使这些指针指向这些向量,使其作为二维数组工作。 在这种情况下,a[i][j]表示获取a[i]指向的指针,然后查找该向量中的第5个元素。即a[i][j]已翻译为*(a[i] + j)

请注意,在第二种情况下,行的长度不必相同。

答案 1 :(得分:0)

  • 第一个用于声明二维数组(数组数组)。
  • 第二个你要声明一个指向int的指针数组,它可以用作多维数组。

Is int *array[32] a pointer to an array of 32 ints, or an array of 32 pointers to int? Does it matter?

看一下http://www.cplusplus.com/doc/tutorial/arrays/来声明多维数组

答案 2 :(得分:0)

int a[5][5];表示编译器应该分配足够的内存来存储25个int,并将其视为一个名为a的二维数组。

int* a[5];表示编译器应该分配足够的内存来存储5个整数指针,并将其视为一个名为a的指针数组。要将其实际用作二维数组,您必须分配更多内存并初始化这些指针以指向它。例如:

int * a[5];
for(int i = 0; i < 5; i++){ a[i] = malloc(sizeof(int) * 5); }

如果不了解您的要求,很难说哪一个更适合您。第二个允许您有效地交换两行,并且通常更灵活,但分配和释放数据结构需要更多代码。

答案 3 :(得分:0)

哪种苹果或橙子更好? 此表示法int a[ROWS][COLS]用于创建矩形2D数组,其尺寸在声明时已知。 当在2D数组声明时间未知列数时使用此int * a[ROWS]表示法或者列数在运行时可能会有所不同或者只是想要创建非矩形(锯齿状)数组,如下所示:

1 2 3 4
4 6
7 1 1 1 5 6 7
9