基本上,代码如下:
#include<stdio.h>
int main(){
int num = 0;
printf("输入数组长度:");
scanf("%d",&num);
int arr[num]; //编译不报错
//int arr[num] = {0};//编译报错
return 0;
}
你什么编译器
int arr[num],这种声明不行,必须是常量num
int arr[num] = {0},这个报错,也是num必须为常量,并且不能分配0个大小元素的数组,num初始是0,
因为C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量。
这个简单例子:http://c.biancheng.net/cpp/html/2748.html
C语言中的数组大小是固定的,定义的时候不能是变量
想法很好,但是不支持这样写int arr[num]
C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量。
你可以先#define num 20
然后再从键盘键入一个数。当然了不能比这个20大
一般来讲,不能这么做的,必须指定数组的大小。但是测试中发现,堆栈中的数组大小,的确是在运行的时候确定的。
数组不能用变量啊,只能是常量
数组不能用变量啊,只能是常量
为什么赋值会报错呢,因为编译的时候编译器只知道你申请的是num(0)个啊,而你输入的时候那是运行时,编译器在编译的时候会有检查,结果发现你给没有的东西赋值初始化(0个嘛),肯定报错了。你把int初始化为1应该就不会错了
想想我上学那时候也是这么写错,哈哈。想我需要用到几个就申请几个,其实你不必要那么节约的,很多时候如果是用基本的数据类型来解决问题的话都是会有冗余。如果用到数组,你先多申请点用吧,没必要因为这个小细节去浪费学习其他知识的机会
#include
int main(){
int num = 0;
printf("输入数组长度:");
scanf("%d",&num);
int arr[num]; //编译不报错
//int arr[num] = {0};//编译报错
return 0;
}
int arr[num],这种声明不行,必须是常量num
int arr[num] = {0},这个报错,也是num必须为常量,并且你的num初始是0,所以不能分配0个大小元素的数组,
c语言环境
报错应该是不确定num的大小吧,万一输入num=0呢?
你两个定义都不行,数组定义的时候必须是常量不能是变量。要想做到内存在程序运行时任意分配就不能用数组,可以用链表