像这样声明多维数组有什么区别:
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