c语言关于数组的一些问题

include<stdio.h>

int main(void)
{
int x=0;
double sum = 0;
int cnt;
double average=0;
printf("请输入数字的数量:");
scanf("%d",&x);
if(cnt>0){
number[cnt];
printf("请输入数字:");
scanf("%d", &x);
while (x != -1) {
number[cnt] = x;
sum += x;
cnt++;
scanf("%d", &x);
}
if (cnt > 0) {
average = sum / cnt;
for (int i = 0; i < cnt; i++) {
if (number[i] > average) {
printf("%d",number[i]);
}
}
}
}
while (1);
return 0;
}
这个代码中,数组的长度是否可以用一个变量代替

回答

可以搜索C语言 VLA(变长数组)了解。
总之就是C99版本新增了这种写法,但是并不是必需特性,也不推荐这么写。课上一般直接就说不能这么写了。
这个功能用 int * number = (int*) malloc(sizeof(int) * cnt); 实现,malloc函数会申请cnt个int大小的空间,并返回首地址。
此时number就和你所想的int number[cnt]一致了,就可以像使用数组那样使用它了。
这种方法涉及到指针,可以跳到指针的部分看一看指针和数组的关系加以了解。
以下是一个例子:

int cnt = 0;
scanf("%d", &cnt);
int * number = (int*) malloc (sizeof(int) * cnt);
for (int i = 0; i < cnt; i++) {
    scanf("%d", &number[i]);
}

for (int i = 0; i < cnt; i++) {
    printf("%d ", number[i]);
}
以上是c语言关于数组的一些问题的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>