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

关于C语言二维数组输入存储代码运行逻辑的疑问求助

解析这段C语言二维数组赋值代码的运行逻辑

首先,咱们先把你给出的代码格式化得更易读:

int n; 
printf("Enter the amount of lines you want to print: "); 
scanf("%d\n", &n); 
int arr[n][n]; 
int a; 
int b; 
for (a=0; a<n; a++){ 
    for(b=0; b<n ; b++){ 
        scanf("%d", &arr[a][b]); 
    } 
}

接下来咱们一步步拆解它的运行逻辑,帮你理清为什么它不是只填充对角线位置:

  • 第一步:确定数组尺寸
    代码先声明整数变量n,然后提示用户输入行数,再用scanf读取这个数值。这里要提个小问题:scanf("%d\n", &n);里的\n是多余的,会导致你输入完n按回车后,程序还得等你输入一个非空白字符才会继续,建议改成scanf("%d", &n);更合理。

  • 第二步:创建二维数组
    int arr[n][n];是C99标准支持的变长数组(VLA),它会生成一个n行n列的二维数组,总共有n*n个整数存储位置。

  • 第三步:嵌套循环填充数组(核心逻辑)
    这是你产生误解的关键部分,咱们仔细捋:

    • 外层循环for (a=0; a<n; a++):a代表当前的行索引,从0开始循环到n-1,也就是会遍历数组的每一行。
    • 内层循环for(b=0; b<n ; b++):b代表当前的列索引,每当外层循环进入某一行(比如a=0时),内层循环会从0遍历到n-1,把当前行的每一列都走一遍。
    • 每次内层循环执行scanf("%d", &arr[a][b]);:把你输入的整数,精准存到数组第a行第b列的位置。

举个实际例子,假设你输入n=3:

  • 当a=0(第一行),b依次取0、1、2,分别填充arr[0][0]、arr[0][1]、arr[0][2];
  • 当a=1(第二行),b再次取0、1、2,填充arr[1][0]、arr[1][1]、arr[1][2];
  • 当a=2(第三行),b取0、1、2,填充arr[2][0]、arr[2][1]、arr[2][2]。

你看,它是逐行、逐列填满整个二维数组,而不是只碰[0][0]、[1][1]这种对角线位置。你之前的误解应该是没搞清楚嵌套循环的执行顺序——外层循环每走一步,内层循环会完整走完一整轮哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:37:36