C语言调用打印函数传入二维数组报参数类型不匹配错误如何解决
C语言二维数组打印代码问题排查与修正
报错根因
你遇到的expected 'int *' but argument is of type 'int'报错,原因是调用printArray函数时第三个参数传递错误:
你写的marks[i][j]是二维数组的单个int类型元素值,而函数形参要求接收的是int*类型的内存地址。同时输入循环结束后i、j的值已经超出数组下标范围,传递的marks[i][j]本身就是非法值。
代码存在的其他问题
- 打印函数中遍历数组时没有移动指针,每次都读取第一个元素的值,无法遍历所有数组内容
- 缺少符合要求的格式控制逻辑,你写的
if(i==2,j==1);是无意义的空语句,逗号表达式在这里没有实际作用,结尾的分号也让该判断不执行任何操作 - 大括号、换行、空格的打印逻辑和你要求的输出格式不匹配
修正后的完整代码
#include <stdio.h> void printArray(int row,int col,int *marks){ printf("{ "); for(int i=0; i<row; i++){ // 非首行前面加两个空格对齐 if(i != 0) { printf(" "); } for(int j=0; j<col; j++){ printf("{%d", *marks); marks++; // 指针后移,读取下一个元素 printf(", %d}", *marks); marks++; } // 非末行打印完换行 if(i != row - 1) { printf("\n"); } } printf(" }"); } int main() { int marks[3][2]; int row = 3,col = 2; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("Enter the value [%d][%d]: ",i,j); scanf("%d", &marks[i][j]); } } // 传递二维数组首元素的地址,类型匹配int* printArray(row, col, &marks[0][0]); return 0; }
核心修改说明
- 传参修正:调用打印函数时传递
&marks[0][0],也就是二维数组第一个元素的内存地址,和形参的int*类型匹配 - 遍历逻辑修正:每打印一个元素就将指针后移一位,保证能按顺序读取所有数组内容
- 格式控制修正:新增了行首空格、换行逻辑,大括号、逗号的打印规则完全匹配你要求的输出格式
- 删除了无意义的空判断语句,清理了冗余的变量声明
内容的提问来源于stack exchange,提问作者Ansh Shrivastava
相关产品推荐
相关产品推荐

