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

请求解析C语言二维数组代码输出19的具体计算过程

拆解这个C语言表达式的计算逻辑

先把代码贴出来方便对照:

#include <stdio.h> 
int main(void) { 
    int a[4][5] = { 
        { 1, 2, 3, 4, 5 }, 
        { 6, 7, 8, 9,10 }, 
        {11,12,13,14,15 }, 
        {16,17,18,19,20 } 
    }; 
    printf("%d\n", *(*(a + **a + 2) + 3)); 
    return 0; 
}

咱们一步步拆解那个看起来有点绕的表达式 *(*(a + **a + 2) + 3):

  1. 先算最内层的 a

    • 在C语言里,二维数组名a本质是指向第一个一维数组a[0]的指针。所以*a就是a[0](也就是第一个一维数组的首地址),再解引用一次**a就等于a[0][0],对应的值是1。
  2. 接着算 a + **a + 2

    • a是指向一维数组的指针,每偏移1个单位就指向数组的下一行(因为每个元素是包含5个int的一维数组)。这里**a是1,所以a + 1指向第二行a[1],再加2就得到a + 3,也就是指向第四行a[3]的指针。
  3. 然后解引用这个结果:*(a + **a + 2)

    • 解引用a + 3就得到a[3],也就是第四行一维数组的首地址,指向a[3][0]。
  4. 再加上3:*(a + **a + 2) + 3

    • 这里a[3]是指向int的指针,偏移3个单位就指向a[3][3]的地址。
  5. 最后解引用得到值:*(*(a + **a + 2) + 3)

    • 解引用这个地址,就拿到了a[3][3]的值,也就是19。

这样一步步拆下来,是不是就清楚为啥输出是19啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:17:51