c语言采用指针的方法转置二维数组,用函数实现。
时间: 2024-11-07 11:24:03 浏览: 5
在C语言中,我们可以使用指针和函数来转置一个二维数组。二维数组实际上是一个一维数组的数组,所以关键在于理解如何交换行和列。下面是一个简单的示例,展示了如何定义一个函数来完成这个任务:
```c
#include <stdio.h>
// 定义一个函数接受指向二维数组首元素的指针,以及行数和列数
void transpose(int (*arr)[M][N], int rows, int cols) {
// 创建临时数组,用于存储转置后的数据
int temp[M][cols];
// 遍历原数组,将行数据存入临时列数组
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
temp[j][i] = arr[i][j];
}
}
// 将临时数组的内容复制回原数组
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
arr[j][i] = temp[i][j];
}
}
}
int main() {
// 假设有一个3x3的二维数组
const int M = 3;
const int N = 3;
int arr[M][N] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
printf("Original array:\n");
print_matrix(arr, M, N); // 自定义函数打印矩阵
transpose(arr, M, N);
printf("\nTransposed array:\n");
print_matrix(arr, M, N); // 再次打印转置后的矩阵
return 0;
}
// 辅助函数,用于打印矩阵
void print_matrix(int matrix[][N], int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
```
在这个例子中,`transpose`函数接收一个指向二维数组的指针,并通过两个嵌套循环交换了行和列的数据。注意,这里的指针是一个指向指针的指针,`(*arr)[M][N]`表示一个指向数组的数组。
阅读全文