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

代码运行正常却报“subscript requires array or pointer type”错误?

二维数组传参错误解决

你的代码能输出只是巧合,实际存在两个关键错误,导致IDE提示下标错误:

错误分析

  • 函数参数类型不匹配:refreshScreen函数定义的参数是int Screen,这只是单个整数,并非二维数组,自然不能用Screen[i][j]的下标方式访问。
  • 传参错误:调用refreshScreen(Screen[5][5])时,传递的是数组第6行第6列的元素(数组下标从0开始,5已经越界),这是单个int值,而非整个二维数组。即便代码侥幸输出结果,这也是未定义行为,完全不可靠。

修正后的代码

这里提供两种可行的修正方式:

方式一:指定二维数组参数的维度

#include <iostream>

// 明确参数是5列的二维数组
void refreshScreen(int Screen[][5]) {
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            std::cout << Screen[i][j];
        }
        std::cout << "\n";
    }
}

int main()
{
    int Screen[5][5] = {
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0}
    };

    // 传递整个二维数组的首地址
    refreshScreen(Screen);

    return 0;
};

方式二:用指针指针(适配任意行列数)

#include <iostream>

void refreshScreen(int** Screen, int rows, int cols) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            std::cout << Screen[i][j];
        }
        std::cout << "\n";
    }
}

int main()
{
    int Screen[5][5] = {
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0}
    };

    // 将二维数组转换为指针指针
    int* ptrs[5];
    for (int i = 0; i < 5; i++) {
        ptrs[i] = Screen[i];
    }
    refreshScreen(ptrs, 5, 5);

    return 0;
};

说明

第一种方式简单直接,适合固定列数的二维数组;第二种方式更灵活,可处理任意行列数的数组,但需要额外的指针转换步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:35:37