在.c文件中有程序: int main() { int const a = 10; a=20; printf("a=%d\n",a); return 0; } 编译就知道C语言编译器会报错,说变量a是常量,常量是不能当左值的,这样看来,好像a是定义的一个常量,不能修改! 修改程序: int main() { int *p; int const a=10; p=(int*)&a; *p=20; printf("a=%d\n",a); return 0; }…
今天探讨const,首先来说是将变量常量化.为什么要将变量常量化,原因有诸多好处有诸多.比如可以使数据更加安全不会被修改! 但是这个词有几个点要注意,那就是他究竟修饰了谁? 1.const int a/ int const a 如果我们给出 const int a;你应该知道这是将a常量化了,但是为什么那?那是因为int 和const 都作为一个类型限定词,有相同的地位. 所以你也可以写成 int const a;似乎这样更加好理解!当然这都不难,难点在哪里哪?当然此时你如果定义指针也是可以修…
C-C++到底支不支持VLA以及两种语言中const的区别 到底支不支持VLA VLA就是variable-length array,也就是变长数组. 最近写程序的时候无意间发现,gcc中竟然支持下面这种写法: int n = 10; int a[n]; 注意上面的语句是在函数内部写的,也就是n和a都是自动变量. 当时十分疑惑,C语言中数组的长度不应该是常量或常量表达式吗?为什么变量也可以.我将代码在VC中跑了一下,发现编译出错,提示数组的大小未知,说明VC中是不支持VLA的. 那既然有的编译器…