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

关于C语言二维数组多层指针访问代码失效的技术问询

问题:二维数组访问代码无法运行的原因分析

代码示例

int main() {
    int i = 0;
    int array[2][2] = { {1,2} , {3,4}};
    for(int j = 0; j<2; j++) {
        for(int k = 0; k < 2;k++) {
            printf("%d", *(*(*(array+i)+j)+k));
        }
        printf("\n");
    }
}

用户思路

我的思路是:尝试访问第i个二维数组(i值为0,因仅定义了一个二维数组),再访问该二维数组的第j个一维数组,最后访问该一维数组的第k个元素。

错误原因分析

  1. 指针解引用层级错误
    array是int[2][2]类型的二维数组,隐式转换后是int (*)[2](指向含2个int的数组的指针):

    • *(array+i)等价于array[0],是int[2]类型的一维数组,再次隐式转换为int*指针;
    • *(array+i)+j等价于array[0]+j,是指向array[0][j]的int*指针;
    • 此时你多做了一次*,得到array[0][j](一个int整数),后续+k变成整数加法,最后对这个整数解引用*,属于对非指针值的非法解引用,触发未定义行为(程序崩溃或异常)。
  2. 循环逻辑与访问逻辑不匹配
    你的循环用j遍历行、k遍历列,但访问表达式里固定用i=0指向第一行,即便指针操作正确,也只会重复访问第一行元素,不符合遍历整个数组的预期。

修正方案

将访问表达式改为*(*(array+j)+k),或者更直观的array[j][k],修正后的代码如下:

int main() {
    int array[2][2] = { {1,2} , {3,4}};
    for(int j = 0; j<2; j++) {
        for(int k = 0; k < 2;k++) {
            printf("%d ", array[j][k]);
        }
        printf("\n");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:01:10