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

二维数组与指针任务代码报错求助:问题排查及修正指导

代码错误排查与修正

问题1:set2函数循环未覆盖最后一个元素

原循环条件p < b会让指针p到达目标尾元素时停止循环,导致最后一个元素无法被赋值。需将条件改为p <= b,确保从首元素到尾元素的所有位置都能被遍历赋值。

问题2:二维数组函数参数格式错误

C语言规定,二维数组作为函数参数时,必须明确除第一维之外的其他维度大小。原print3函数的const int tab[][]不符合语法规范,应修改为const int tab[][8],指定第二维长度为8。

问题3:set2函数参数类型不匹配

主函数中tab是二维数组名,会隐式转换为指向数组第一行的指针(类型为int (*)[8]),而set2的参数要求是int*,二者类型不匹配。应直接传递数组首元素的地址&tab[0][0],保证参数类型一致。


修正后的完整代码

#include <stdio.h>

void set2(int *a, int *b)
{
    int start = 40;
    // 修正循环条件,覆盖最后一个元素
    for(int *p = a; p <= b; p++, start--)
    {
        *p = start;
    }
}

// 修正二维数组参数,指定第二维大小
void print3(const int tab[][8])
{
    for(int i = 0; i<5; i++)
    {
        for(int j = 0; j<8; j++)
        {
            printf("%3i", tab[i][j]);
        }
        putchar('\n');
    }
}

int main()
{
    int tab[5][8] = {0};
    // 传递数组首元素地址,匹配int*类型
    set2(&tab[0][0], &tab[4][7]);
    print3(tab);

    return 0;
}

内容的提问来源于stack exchange,提问作者Ala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:05:39