C语言实现两个数组转置时函数参数传递及报错问题求助
问题解答
1. 核心报错原因
你代码的警告和函数联动异常完全来自于FindTranspose函数调用时的参数类型不匹配:你传递的before[3][3]是尝试取下标为(3,3)的数组元素,不仅数组越界(33数组的最大合法下标是2),而且类型是单个int值,和函数要求的二维数组参数完全不符*。
2. 各位置参数填写规范
- 函数定义
int FindTranspose(????):你当前写的参数列表int before[3][3], int after[3][3], int row_num, int col_num是完全可用的,建议把形参i、j改名成row_num、col_num避免和内部循环变量冲突。另外你当前函数没有返回int值,建议把返回值改成void更合理。 - 主函数定义
int main(????):不需要接收命令行参数的场景下,标准写法为int main(void),你原有写法int main()也可以正常运行。 - 函数调用
FindTranspose(????):数组传参直接写数组名即可,正确写法为FindTranspose(before, after, 3, 3),直接传递数组首地址和矩阵的行列数即可。
3. 指针相关说明
你当前固定3*3矩阵的场景不需要显式写指针语法:C语言中数组作为函数参数传递时,会自动退化为指向首元素的指针,你写的int before[3][3]本质等价于int (*before)[3](指向长度为3的int数组的指针),编译器会自动处理地址传递,修改形参数组的内容会直接作用于实参数组,符合你转置功能的需求。
如果后续需要适配任意大小的矩阵,可以改用一级指针配合动态内存分配,实现更通用的转置函数。
修正后的完整代码
#include <stdio.h> // 改返回值为void,因为不需要返回整数结果,形参改名避免冲突 void FindTranspose(int before[3][3], int after[3][3], int row_num, int col_num){ int rows, columns, i, j; printf("\nThe original matrix: \n"); for(i=0;i<row_num;i++){ printf("\n"); for(j=0;j<col_num;j++){ printf("%d ", before[i][j]); } } for(rows = 0; rows < row_num; rows++){ for(columns = 0;columns < col_num; columns++){ after[columns][rows] = before[rows][columns]; } } printf("\n"); printf("\nThe Transpose of the matrix: \n"); printf("\n"); for(rows = 0; rows < col_num; rows++){ for(columns = 0; columns < row_num; columns++){ printf("%d ", after[rows][columns]); } printf("\n"); } } int main(void){ int before[3][3], after[3][3], i, j; for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("Enter number for array - [%d],[%d] : ",i,j); scanf("%d", &before[i][j]); } } // 正确传参:直接传数组名、行列数 FindTranspose(before, after, 3, 3); return 0; }
内容的提问来源于stack exchange,提问作者Annabell_27
相关产品推荐
相关产品推荐

