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