例:3*3矩阵转置 将二维数组传入函数 (*val)[n],数组指针 顾名思义,就是指向数组的指针。 每个元素是一个一维数组 [c语言 数组与指针 - 时空云博客 (skyw.cc)](https://blog.skyw.cc/archives/175.html) ``` #include "stdio.h" void Transpose(int (*matrix)[3]) { int tmp; // 1,2 tmp = matrix[0][1]; matrix[0][1] = matrix[1][0]; matrix[1][0] = tmp; // 1,3 tmp = matrix[0][2]; matrix[0][2] = matrix[2][0]; matrix[2][0] = tmp; // 2,3 tmp = matrix[1][2]; matrix[1][2] = matrix[2][1]; matrix[2][1] = tmp; } int main() { int i, j, a[3][3]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { scanf("%d", &a[i][j]); } } Transpose(a); for (i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d ", a[i][j]); } printf("n"); } return 0; } ``` 一级指针表示二维数组 ``` #include #define ROW 3 #define COL 3 /* Function declarations */ void matrixInput(int* mat) { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { scanf("%d", mat + i * COL + j); } } } void matrixPrint(int* mat) { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { printf("%d ", *(mat + i * COL + j)); } printf("n"); } } void matrixMultiply(int* mat1, int* mat2, int* res) { //第一个矩阵第i行 int val; for (int i = 0; i < ROW; i++) { //第一个矩阵第j列 for (int j = 0; j < COL; j++) { val = *(mat1 + i * COL + 0) * *(mat2 + 0 * COL + j) + *(mat1 + i * COL + 1) * *(mat2 + 1 * COL + j) + *(mat1 + i * COL + 2) * *(mat2 + 2 * COL + j); *(res + i * COL + j) = val; } } } int main() { int mat1[ROW][COL]; int mat2[ROW][COL]; int product[ROW][COL]; /* * Input elements in matrices. */ // printf("Enter elements in first matrix of size %dx%dn", ROW, COL); matrixInput(mat1); // printf("Enter elements in second matrix of size %dx%dn", ROW, COL); matrixInput(mat2); // Call function to multiply both matrices matrixMultiply(mat1, mat2, product); // Print product of both matrix matrixPrint(product); return 0; } ``` Loading... 例:3*3矩阵转置 将二维数组传入函数 (*val)[n],数组指针 顾名思义,就是指向数组的指针。 每个元素是一个一维数组 [c语言 数组与指针 - 时空云博客 (skyw.cc)](https://blog.skyw.cc/archives/175.html) ``` #include "stdio.h" void Transpose(int (*matrix)[3]) { int tmp; // 1,2 tmp = matrix[0][1]; matrix[0][1] = matrix[1][0]; matrix[1][0] = tmp; // 1,3 tmp = matrix[0][2]; matrix[0][2] = matrix[2][0]; matrix[2][0] = tmp; // 2,3 tmp = matrix[1][2]; matrix[1][2] = matrix[2][1]; matrix[2][1] = tmp; } int main() { int i, j, a[3][3]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { scanf("%d", &a[i][j]); } } Transpose(a); for (i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d ", a[i][j]); } printf("n"); } return 0; } ``` 一级指针表示二维数组 ``` #include <stdio.h> #define ROW 3 #define COL 3 /* Function declarations */ void matrixInput(int* mat) { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { scanf("%d", mat + i * COL + j); } } } void matrixPrint(int* mat) { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { printf("%d ", *(mat + i * COL + j)); } printf("n"); } } void matrixMultiply(int* mat1, int* mat2, int* res) { //第一个矩阵第i行 int val; for (int i = 0; i < ROW; i++) { //第一个矩阵第j列 for (int j = 0; j < COL; j++) { val = *(mat1 + i * COL + 0) * *(mat2 + 0 * COL + j) + *(mat1 + i * COL + 1) * *(mat2 + 1 * COL + j) + *(mat1 + i * COL + 2) * *(mat2 + 2 * COL + j); *(res + i * COL + j) = val; } } } int main() { int mat1[ROW][COL]; int mat2[ROW][COL]; int product[ROW][COL]; /* * Input elements in matrices. */ // printf("Enter elements in first matrix of size %dx%dn", ROW, COL); matrixInput(mat1); // printf("Enter elements in second matrix of size %dx%dn", ROW, COL); matrixInput(mat2); // Call function to multiply both matrices matrixMultiply(mat1, mat2, product); // Print product of both matrix matrixPrint(product); return 0; } ``` Last modification:December 8, 2022 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏