C语言中 可以对符号常量进行赋值操作吗,符号常量可以在main()中进行赋值么?...

7fc78c329024099698529734877d4967.png

milanlover

2015-01-12 11:37

严格意义上来讲,C语言并没有绝对的常量这个概念。const是一个C语言的关键字,它限定了一个变量不允许被改变。

例如:下面代码

#define N 10

int main()

{

int arr[N];  //编译通过,因为这里N被宏替换为10

return 0;

}

但是,

int main()

{

int const N =10;

int arr[N]; //编译不通过,因为编译器认为N是个变量,不是常量。只不过这个变量不允许被修改

}

而且在C语言中被const修饰的就一定是常量吗?真的能不动如山吗?

例如下面代码:

const int a = 10;

int *pa = &a;

*pa = 20;

printf("%d/n",*pa);

printf("%d/n",a);

编译时候,只是有个警告并没有错误,而且运行时,a的值也修改为20了。

要真正保证不能修改a,代码修改如下:

const int a = 10;

const int *pa = &a; //或者int const *pa=&a;

*pa = 20;

printf("%d/n",*pa);

printf("%d/n",a);

-------------------------------------------------------------------------

说这番话的目的想告诉大家,C由于是个比较原始古老的语言,在设计初考虑的不像C++,Java等这些语言严谨。对于常量在C中,其实没有严格意义上的常量类型。const的目的只是限定一个变量不允许修改,换句话说,它的值对这个符号来说是只读的,但是并不能防止通过程序的内部(或者说外部)的方法来修改这个值。所以,我可以简单理解为const是修饰的变量只是一个只读的变量而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值