声明多维数组之间有什么区别:
int a[5][5];
或者
int* a[5];
哪一个更好用?感谢。
答案 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)
答案 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