我想用一个0初始化一个5x5数组,作为每个数组索引的内容。但是每当我运行我的代码时,我都会遇到分段错误(核心转储错误)。您能帮我解决我的代码有什么问题吗?我的代码如下。
#include <stdio.h>
int main()
{
int a[5][5];
int i,j;
for(i=0; i<=5; i++)
{
for(j=0; j<=5; j++)
{
a[i][j]=0;
}
}
}
#define ROWS 5
#define COLS 5
int a[ROWS][COLS];
for (int i=0; i<ROWS; ++i) {
for (int j=0; j<COLS; ++j) {
a[i][j] = 0;
}
}
也就是说,您可以简单地使用以下代码初始化数组:
#define ROWS 5
#define COLS 5
int a[ROWS][COLS] = { 0 };
请注意,我使用名称而不是在各处使用硬编码数字。这更易读,而且不易出错。
对于C中的数组,索引从0开始。
当我们声明一个数组a[5]
时,显然表明我们正在为5
分配某些数据类型的a
内存空间,一种访问这些内存地址的方法是使用索引。如前所述,在C中,索引从0开始,这5个空格将是:
1 2 3 4 5 <--------- Actual position
a[0] a[1] a[2] a[3] a[4] <--------- Array index
因此,当我们尝试访问上述示例的a[5]
时,将导致分段错误。
类似地,对于您的情况,您应像下面那样更正for循环:
for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { a[i][j] = 0; } }
for(i=0; i<=5; i++) // accessed extra element where there are only 5 (i < 5)
for(j=0; j<=5; j++) // same with this, correct: (j < 5)
a[i][j]=0;
正确的解决方法是:
for(i = 0; i < 5; i++)
for(j = 0; j < 5; j++)
a[i][j]=0;
用途:
int a[5][5] = {0};
将多维数组初始化为零。
可以找到更多概念in this thread。