今天在刷openjudge的时候发现了一个关于数组的一个小细节
话不多说,看图
这是一个简单的循环,先看看我第一次写的代码:
#include <stdlib.h>
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int arry_1[n][3],arry_2[3]; % 注意这行
for (int i=0; i<n; i++){
for (int j=0; j<3; j++){
scanf("%d", &arry_1[i][j]);
arry_2[j] += arry_1[i][j];
}
}
printf("%d %d %d %d", arry_2[0],arry_2[1],arry_2[2],
arry_2[0]+arry_2[1]+arry_2[2]);
return 0;
}
带入数据得到的结果却是这样的:
逐渐变得奇怪emmmmmm
但是只要我们把
int arry_1[n][3],arry_2[3];
改成
int arry_1[n][3],arry_2[3]={0,0,0};
这是因为开始的int arry[3]只是开辟了一个存放数组的空间,并没有对其内容进行初始化,这就导致里面可能的内容是随机的。
------------------------------------------------------我是分割线----------------------------------------------
此外,本人在练习的过程中又发现了一个数组初始化相关的问题
// 1、已知数组长度初始化
int array[3] = {0};
// 2、输入数组长度初始化 (报错!!!!!)
int n;
scanf("%d", &n);
int array[n] = {0};
第一种方法就和上文的方式相同,可以运行,但是第二种方式则报错
error: variable-sized object may not be initialized
查阅其他相关博客后知道了 在C语言中,使用变量来定义数组长度时,这个数组可以定义,却不能同时进行初始化赋值,需要在之后赋值!!!!
博客文章来自 :编译错误:variable-sized object may not be initialized_Leo062701的博客-CSDN博客