2 wynne1005 Wynne1005 于 2016.02.03 09:22 提问

C语言数组定义问题,求解答
int b;
scanf_s("%d", &b);
int Array[];
int i;
for (i = 0; i<b; i++)
{
    scanf("%d", &Array[i]);
}

这个为什么报错呀

8个回答

qwezhaohaihong
qwezhaohaihong   2016.02.03 09:34

首先你的数组里面是不确定的,不能定义长度不确定的数组,除非你是用动态内存区定义。应该改为Array【100】或者其他的,其次sacnf后面不应该有_s

yingxinggedou
yingxinggedou   2016.02.03 09:42

你只是定义了数组,

但是没有初始化,

所以Array[i]数据和地址都还没有分布,不能使用。

解决方法:

int Array[]=new int[b]; //因为后面就是需要输入b个元素。

scanf_s() scanf() 是不同开发工具里面引用的程序源,可以不一样。

leilba
leilba 你这个数组是java的语法吧
接近 2 年之前 回复
leilba
leilba   Rxr 2016.02.03 09:43

int Array[];必须要指定数组的大小,因为在c中,数组是在程序运行最开始就需要被分配内存的。比如说你需要定义成 int Array[10];
当需要可变长度的数组的时候,上面方法就不适用了,不过你可以使用指针来动态申请大小:

 int *Array = new int[b];

那么这个Array就可以当做长度为b的数组来用,你可以直接Array[i]来访问内容

mlw519
mlw519   2016.02.03 09:55

c语言就不支持int Array[];这种写法,这是语法层面的错误。
还有c语言int Array[]=new int[b];因为c很牛,却不支持new(搞不清楚c99或以后的c标准是否支持)。
纯c如果想要动态的是用malloc来在堆区分配空间,不够用要用realloc来重新分配空间

Rio_1
Rio_1   2016.02.03 10:04

从上到下分析

scanf("%d",&b);//取地址符后不要带_s

int Array[b];//c语言的数组,要不然就在创建的时候规定长度,要不然就要在创建时赋值

    for(int i = 0; i < b ; ++i)//- -个人习惯把int i放在判断条件里- -因为省一行,而且好看。至于最后的++i还是i++看你喜欢,习惯性的会使用i++,但实际上++i运行效率更好一点
Trent1985
Trent1985   2016.02.03 13:06

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]);
}
这样才对!

Trent1985
Trent1985   2016.02.03 13:06

int Array = (int*)malloc(sizeof(int) * b);

q3733353520
q3733353520   2016.02.17 18:04

C不支持变成数组,只能用malloc动态申请内存

q3733353520
q3733353520 变长
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!