const 修饰的全局变量,初始化则存放在data区,未初始化放在bss区
不可以直接修改;用指针的方式间接修改,编译不出错但是运行会出错
const修饰的局部变量, 放在栈上
不可以直接修改;用指针的方式间接修改,编译不出错但是运行也不出错
用指针间接修改的方式可以改变const修饰的局部变量
1. #include <stdio.h> 2. 3. const int a = 10; 4. 5. //void test01() 6. //{ 7. // //a = 100; //编译器报错,不允许直接修改 8. // int *p = &a; 9. // *p = 20; 10. // printf("%d\n", *p); //编译不出错,运行出错,这里a放在data区,不允许被修改 11. //} 12. 13. void test02() 14. { 15. const int b = 10; 16. 17. //b = 20; //编译器报错,不允许直接修改 18. 19. int *p = &b; 20. *p = 20; 21. printf("%d\n", b); //这里编译运行都可以通过,const常量是个冒牌货 22. 23. } 24. 25. int main(void) 26. { 27. //test01(); 28. test02(); 29. 30. system("pause"); 31. return 0; 32. }