c语言二维数组行列转换
时间: 2024-08-05 16:01:40 浏览: 63
在C语言中,二维数组的行列转换通常涉及到将矩阵从行优先存储(按行存储)转换为列优先存储(按列存储),反之亦然。这种操作在需要优化内存访问、计算效率或者其他特定应用场景时可能会用到。
**行优先存储转列优先存储(Row-major to Column-major):**
假设我们有一个int类型的二维数组`arr[row][col]`,要将其转为列优先,可以创建一个新的数组`new_arr[col][row]`,然后遍历原数组,每次取一行数据放到新数组的一列里:
```c
for (int i = 0; i < col; i++) {
for (int j = 0; j < row; j++) {
new_arr[i][j] = arr[j][i];
}
}
```
**列优先存储转行优先存储(Column-major to Row-major):**
同样的,遍历新数组并将每一列的数据存入原数组的对应行:
```c
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
arr[i][j] = new_arr[j][i];
}
}
```
相关问题
二维数组行列元素互换 将一个二维数组行列元素互换,存到另一个二维数组中用c语言怎么写
可以按照以下步骤来实现:
1. 定义两个二维数组,一个是原数组,一个是转换后的数组。
2. 使用for循环遍历原数组,将每一行的元素赋值给转换后数组的对应列。
3. 最后打印转换后的数组。
以下是示例代码:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main() {
int original_array[ROWS][COLS] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
int transposed_array[COLS][ROWS];
// 转换数组
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
transposed_array[j][i] = original_array[i][j];
}
}
// 打印转换后的数组
for (int i = 0; i < COLS; i++) {
for (int j = 0; j < ROWS; j++) {
printf("%d ", transposed_array[i][j]);
}
printf("\n");
}
return 0;
}
```
输出结果为:
```
1 5 9
2 6 10
3 7 11
4 8 12
```
c语言如何用自定义函数将二维数组的行列转换输出
可以定义一个函数,接收一个二维数组和其行列数作为参数,然后将行列交换后输出。具体代码如下:
```
#include <stdio.h>
void transpose(int arr[][3], int row, int col) { // 传入二维数组和行列数
int i, j;
int trans[col][row]; // 定义转置后的数组,行列互换
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
trans[j][i] = arr[i][j]; // 将原数组中的元素赋值到转置数组中对应的位置
}
}
// 输出转置后的数组
for (i = 0; i < col; i++) {
for (j = 0; j < row; j++) {
printf("%d ", trans[i][j]);
}
printf("\n");
}
}
int main() {
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
transpose(arr, 3, 3); // 调用自定义函数
return 0;
}
```
输出结果为:
```
1 4 7
2 5 8
3 6 9
```