<<C和指针>>第1章之编程练习心得20140702

在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编译以上代码,确实没有错误产生,也没有给出警告)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值