c语言中二维数组按行还是按列存储啊?

我记得有一次,在做一个项目时,我必须处理一个 1 0 行 5 列的二维数组。
数据量相当大。
当时,我想知道是否以行多数或列多数存储这个数组,因为行多数使访问元素更快,而列多数使插入和删除操作更高效。
我尝试了行优先的方法,发现访问速度实际上非常快,尤其是需要不断访问一行数据时。

当时我就想,如果我用一个C++的动态二维数组来存储这个数据呢?查了资料,发现用C++实现动态二维数组很有趣。
首先我们需要定义指向指针的指针,然后逐行分配内存。
我记得当时写的内容
cpp 整数数据; 数据=新的int[1 0]; for(int k = 0; k < 1 xss=clean> 然后我按照通常的二维数组方法赋值:data[0][0] = 5 ;最后需要清除内存,避免内存泄漏。

cpp for(int i = 0; i < 1> 这个过程虽然简单,但却让我对C++中的动态二维数组有了更深入的了解。
等等,我突然想到,随着这个阵列上的数据量的增长,内存管理可能会成为一个问题。
那么我们应该做什么呢?

二维数组可以省略行还是列c语言

嘿嘿,这个东西,说实话,还蛮有趣的。
在C语言中,定义二维数组时,不需要写行数,但需要写列数。
这主要是由内存如何放置以及编译器如何计算决定的。

看,只要在初始化期间有足够的数据,行数就可以省略。
比如你写int arr[][3 ] = {1 , 2 , 3 , 4 , 5 , 6 };,第一列的数字是3 ,而你有6 个数字,编译器会自动帮你分成两行,一行3 个,另一行3 个。
就是这么简单。
如果数字不够,比如只写了{1 ,2 ,3 },那么编译器就不知道怎么除,肯定会报错。

必须写列数,为什么?因为编译器需要知道每一行有多少个元素才能计算出地址。
如果你仔细想想,内存是连续排列的。
如果省略列号,编译器将不知道如何计算 arr[i][j] 元素的地址。
地址计算公式为arr + i n + j。
这个式子里有n,对应列数。
如果不知道列数,如何计算地址?当然不是。

一个常见的错误是只省略列号,但必须写入行号。
像这样的int arr[2 ][] = {1 , 2 , 3 };,编译器一看就一头雾水。
每行有多少个数字?我不知道!肯定会报语法错误。

初始化时还需要小心。
列数为3 ,所以每行初始化的数据不能超过3 ,如果多了,编译器会帮你截断,或者直接报错。
例如,您不能写成{1 ,2 ,3 ,4 }。
这绝对是不可能的。
列数为 3 ,一行只有 3 个数字。
编译器不会关心是否还有更多。

适用于该主题的场景也非常具体。
如果写代码的时候不确定行数,只依赖初始化的数据量,不写行数也是很方便的。
比如动态分配内存什么的。
至于列数,如果是固定的,比如你在做矩阵运算,列数就应该写清楚,否则别人看不懂你的代码,这样就提高了可读性。

仅此而已。