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

C语言数组边界排列规则及二维数组索引正确性问询

C二维数组结构与索引问题解答

数组结构说明

对于定义int arr[4][5];,它等价于包含4个元素的一维数组,每个元素又是一个包含5个int类型元素的一维数组——简单说就是逻辑上的4行5列数组,绝非“包含5个4元素数组”的结构。

你可以通过sizeof操作直接验证:

  • sizeof(arr):整个数组的总大小,等于4 * 5 * sizeof(int)
  • sizeof(arr[0]):数组第一个元素的大小,也就是单个5元素int数组的大小,等于5 * sizeof(int)
  • sizeof(arr[0][0]):单个int元素的大小,即sizeof(int)

通过计算sizeof(arr)/sizeof(arr[0])得到4,sizeof(arr[0])/sizeof(arr[0][0])得到5,就能明确外层数组有4个元素,每个内层数组包含5个元素。

数组索引规则

C语言的数组索引是从0开始计数的:

  • 第一个维度(外层数组)的合法索引范围是0到3(总共有4个元素)
  • 第二个维度(内层数组)的合法索引范围是0到4(每个内层数组有5个元素)

所以:

  • arr[4][3]属于越界访问,第一个维度的索引4超出了0-3的合法范围
  • arr[3][4]才是访问最后一个元素的正确写法,对应逻辑上的第4行第5列元素(从1开始计数的表述)

验证方法(规避越界风险)

你可以通过初始化数组并打印元素的方式验证,示例代码:

#include <stdio.h>

int main() {
    int arr[4][5];
    // 给最后一个合法元素赋值
    arr[3][4] = 100;
    // 打印该元素,会输出100
    printf("arr[3][4] = %d\n", arr[3][4]);
    
    // 遍历所有合法元素,确认范围
    for(int i=0; i<4; i++){
        for(int j=0; j<5; j++){
            arr[i][j] = i*10 + j;
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

运行后会输出4行、每行5个连续数值,最后一行最后一个数是34,对应arr[3][4],直观验证索引规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:32:16