You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:27:01