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



像这样声明多维数组有什么区别:

int a[5][5];

或this

int* a[5];

?

哪个更好?谢谢。

两个都可以用来声明二维数组。

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

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

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

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

不知道你的需求,很难说哪一个更适合你。第二种方法允许您有效地交换两行,并且通常更灵活,但是需要更多的代码来分配和释放数据结构。

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

int *array[32]是指向32个int型数组的指针,还是指向int型的32个指针的数组?这有关系吗?

查看http://www.cplusplus.com/doc/tutorial/arrays/如何声明多维数组

苹果和橘子哪个更好?这个符号int a[ROWS][COLS]用于创建在声明时已知尺寸的矩形2D数组。当列数在2D数组声明时未知时,或者列数在运行时可以变化,或者只是想要创建像这样的非矩形(锯齿状)数组时,使用int * a[ROWS]表示法:

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

相关内容

  • 没有找到相关文章

最新更新