const是伪常量,无法用于数组的初始化和全局变量的初始化,本质就是限定一个变量不能直接赋值。
如以下代码:
1 #define A 102 int arr[A];3 4 //const本质,伪常量 ,无法用于数组初始化和全局变量初始化5 /*6 const int B = 10;7 int arr[B];8 */
但是如果局部变量是能够初始化编译并运行的
1 void main()2 {3const int B = 10;4int arr[B];5 }
const是伪常量,都知道常量是不能改变值的。例如这样是根本无法编译的。
1 void main() {2//num在栈区,只有栈区会自动回收释放3//局部const常量在栈区,而不在静态区(静态区会一直存在)4const int num = 10;//num就是一个常量5//num = 11; //const本质,限定一个变量不能直接赋值6 }
前面一直强调const是伪常量,因为可以间接的去改变它的值。利用指针变量
1 void main() { 2//num在栈区,只有栈区会自动回收释放 3//局部const常量在栈区,而不在静态区(静态区会一直存在) 4const int num = 10;//num就是一个常量 5//num = 11; //error const本质,限定一个变量不能直接赋值 6 7//间接改变常量值 8const int *p = #//定义一个指针指向一个常量,存储num的地址 9int *pv = (int *)p;//对指向常量的指针进行强制转换10*pv = 8;//对指针指向内容赋值11 12printf("%d",num); //813 14 }