C 语言行主序和列主序程序

2025年1月7日 | 阅读 4 分钟

行主序 (Row-major)列主序 (column-major) 是计算中用于将多维数组存储在线性内存(如 随机存取内存 (RAM))中的方法。这两种方法在元素在内存中连续存储的顺序上有所不同。行主序 中的元素是按行顺序存储的,而列主序中的元素是按列顺序存储的。

1. 行主序

行主序 中,多维数组的元素是按行存储的。对于一个二维数组,第一行的元素首先被放置,然后是第二行的元素,依此类推。内存地址必须沿着行方向是连续的,以便能够快速访问元素。

示例:Row_major.c

输出

5 2 0 14 
12 6 7 3 
7 15 11 12 

说明

1. int row_major_array[3] [4] = {{5, 2, 0, 14}, {12, 6, 7, 3}, {7, 15, 11, 12}};

在此示例中,此行声明并初始化了 row_major_array 二维整数数组。它有三行四列,并且元素已预先填充了预定义值。

  • row_major_array[0][0] 的值为 5\
  • [0][1] 的值为 2
  • row_major_array[2][3] 的值为 12

2. int rows_count = 3 和 int cols_count = 4;

这些行定义了两个变量 rows_countcols_count,用于存储 row_major_array 数组的行数和列数。

3. 嵌套循环

  • 外层循环 (for (int i = 0; i < rows_count; i++)) 遍历数组的行。
  • 内层循环 (for (int j = 0; j < cols_count; j++)) 遍历数组的列。

printf("%d ", row_major_array[i][j]);: 用于输出二维数组的元素。在显示每个行的元素后,会打印一个新行来移动到下一行 (printf("\n");)

return 0;: 表示主函数已成功完成。程序已成功运行。

2. 列主序

列主序 中,多维数组的元素是按列存储的。对于一个二维数组,第一列的每个元素首先被放置,然后是第二列的每个元素,依此类推。内存地址必须沿着列的方向是连续的。

示例:column_major.c

输出

Original Matrix (Row-Major Order):
1	4	7	10	
2	5	8	11	
3	6	9	12	

Matrix in Column-Major Order:
1	2	3	
4	5	6	
7	8	9	
10	11	12	

说明

1. 程序通过使用 matrix 二维数组定义了一个 3x4 的矩阵。

  • 两个变量 rows 和 cols(当前示例中为 3 行 4 列)给出了矩阵的维度。
  • 变量 count 设置为 1。此变量的值用于填充矩阵的元素。

2. 填充矩阵

  • 使用 嵌套循环,首先遍历每一列,然后遍历该列中的每一行。
  • 将 count 变量赋值给当前选定的矩阵元素,然后 count 递增。因此,矩阵被填充了从 1 开始的连续数字。

3. 以行主序打印原始矩阵

  • 程序首先以 行主序 打印原始矩阵。
  • 使用两个嵌套循环来遍历矩阵的行和列。
  • printf 语句显示每个矩阵元素,后跟一个制表符 (t)。显示一行后,会写入一个换行符 (\n) 以转到下一行。

4. 以列主序打印矩阵

  • 在显示原始矩阵后,程序将相同的矩阵以列主序打印出来。
  • 循环的组织方式不同:外层循环遍历列,而内层循环遍历每列中的行。

元素按照行主序打印,从而生成一个逐列显示的矩阵。