今天在给学生培训的时候,讲到C语言中定义数组的时候,数组的长度只能是常量和常量表达式,而不能是变量(不能动态定义数组)。通过一段代码进行演示。
#include<stdio.h>
int main() {
int len;
scanf("%d",&len);
int a[len];
for(int i=0;i<len;i++){
a[i]=i;
printf("%d",a[i]);
}
return 0;
}
按照通常的理解,C语言中是不能通过变量定义动态数组的,此段代码应当编译错误(例如主流教材都是这样阐述)。然而在DEV-C++环境下,代码竟然可以正常运行并输出结果。
回头我又试了一下用Visual Studio运行这段代码,则IDE直接在int a [len]处标红,显示“表达式必须含有常量值”,这跟我们平时的认识是相符的。
可见,C语言中数组的长度必须为常量并不是绝对的,而是取决于不同的C标准。当然,为了提高自己代码的健壮性,也为了养成良好的编码习惯,还是不要用变量来定义数组长度。