【问题标题】:2D array interpretation二维数组解释
【发布时间】:2019-09-11 15:09:59
【问题描述】:

正在尝试下面这样的一段代码,发现事情并没有像预期的那样在数组索引中存储值。请检查下面的代码 sn-p 和输出

#include <stdio.h>

int main(void)
{
    int a[2][2];
    int i,j,count_ld_x=0,count_rd_x=0;

    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("Inputing value for the element:a[%d][%d]",i,j);
            scanf("%d",&a[i][j]);
        }
    }

    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("a[%d][%d]=%d\n",i,j,a[i][j]);
        }
    }
}

输入输出:-

./main

元素的输入值:a[0][0]0

元素的输入值:a[0][1]1

元素的输入值:a[0][2]2

元素的输入值:a[1][0]3

元素的输入值:a[1][1]4

元素的输入值:a[1][2]5

元素的输入值:a[2][0]6

元素的输入值:a[2][1]7

元素的输入值:a[2][2]8

a[0][0]=0

a[0][1]=1

a[0][2]=3

a[1][0]=3

a[1][1]=4

a[1][2]=6

a[2][0]=6

a[2][1]=7

a[2][2]=8

困惑:-我将 a[0][2] 与 2 存储在一起,而同一位置的 o/p 是 3。你能解释一下是什么问题吗?

【问题讨论】:

  • 当数组声明为[2] 大小时,索引为0 和1。2 超出范围。
  • 将所有&lt;3更改为&lt;2,或将数组更改为a[3][3]
  • 每个人学习 C 都会产生这个错误,所以我建议阅读你的初级 C 编程书籍中关于数组的章节。关键是要理解声明数组大小和执行数组访问是两件不同的事情,后者使用 0 索引。

标签: c arrays multidimensional-array


【解决方案1】:

我不知道您是否真的打算这样做来看看会发生什么,但您创建了一个 2x2 数组,然后尝试访问 a[2][*] 和 a[*][2] 类型的位置.查看迭代中的限制,例如“for(i=0;i3 ;i++)”。尝试访问数组边界之外的内存会导致未定义行为https://en.wikipedia.org/wiki/Undefined_behavior

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 2019-03-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多