在C语言中,定义一个数组时,必须同时指定数组的大小,如
unsigned char department[];
那么VS会提示,不允许使用不完整的类型,department是未知的大小。
也不能用变量去指定数组大小,如
int a =100;
unsigned char department[a];
这样也会报错。
解决办法:
为了方便日后维护,可以使用define
#define MAX_INPUT 100
unsigned char department[MAX_INPUT];
突然想到const可以定义一个常量,那么是不是可以定义
const int MAX_INPUT=100;(注意有分号,与define不一样)
这时VS会报错,error C2057: 应输入常量表达式。这是因为:
关键字const并不能把变量变成常量,在一个符号前加上const限定符只是表示这个符号不能被赋值。也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(或者是外部)的方法来修改这个值(通过地址来修改,不能通过对该符号赋值修改)。const理解为readonly,即 只读变量 更确切点,再怎么修饰,MAX_INPUT也不是常量。
但是在标准C++中,const定义的是一个常量,这种写法是对的。实际上,根据编译过程及内存分配(编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高)来看,这种用法本来就应该是合理的,只是ANSI C对数组的规定限制了它(实际上用GCC或VS2005编译以上代码,确实没有错误产生,也没有给出警告)