int b;
scanf_s("%d", &b);
int Array[];
int i;
for (i = 0; i<b; i++)
{
scanf("%d", &Array[i]);
}
这个为什么报错呀
首先你的数组里面是不确定的,不能定义长度不确定的数组,除非你是用动态内存区定义。应该改为Array【100】或者其他的,其次sacnf后面不应该有_s
你只是定义了数组,
但是没有初始化,
所以Array[i]数据和地址都还没有分布,不能使用。
解决方法:
int Array[]=new int[b]; //因为后面就是需要输入b个元素。
scanf_s() scanf() 是不同开发工具里面引用的程序源,可以不一样。
int Array[];必须要指定数组的大小,因为在c中,数组是在程序运行最开始就需要被分配内存的。比如说你需要定义成 int Array[10];
当需要可变长度的数组的时候,上面方法就不适用了,不过你可以使用指针来动态申请大小:
int *Array = new int[b];
那么这个Array就可以当做长度为b的数组来用,你可以直接Array[i]来访问内容
c语言就不支持int Array[];这种写法,这是语法层面的错误。
还有c语言int Array[]=new int[b];因为c很牛,却不支持new(搞不清楚c99或以后的c标准是否支持)。
纯c如果想要动态的是用malloc来在堆区分配空间,不够用要用realloc来重新分配空间
从上到下分析
scanf("%d",&b);//取地址符后不要带_s
int Array[b];//c语言的数组,要不然就在创建的时候规定长度,要不然就要在创建时赋值
for(int i = 0; i < b ; ++i)//- -个人习惯把int i放在判断条件里- -因为省一行,而且好看。至于最后的++i还是i++看你喜欢,习惯性的会使用i++,但实际上++i运行效率更好一点
int b;
scanf_s("%d", &b);
int Array = (int);malloc(sizeof(int) * b);
int i;
for (i = 0; i<b; i++)
{
scanf("%d", &Array[i]);
}
这样才对!
int Array = (int*)malloc(sizeof(int) * b);
C不支持变成数组,只能用malloc动态申请内存