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是修饰的变量只是一个只读的变量而已。