一:
const只读变量
—— const修饰的变量是只读的,本质还是变量
—— const修饰的局部变量在栈上分配空间
—— const修饰的全局变量在全局数据区分配空间
—— const只在编译期有用,在运行期无用
注:———————————————————————————————————
const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边
在现代C语言编译器中,修改const全局变量将导致程序崩溃
标准C语言编译器不会将const修饰的全局变量存储与只读存储区,而是存储于可修改的
全局数据区,其值依然可以改变
——————————————————————————————————————
二:
三:
const修饰的局部变量
四:
const修饰的全局变量
五:
const修饰的全局变量
g_cc这个全局变量 由于const,被存储于 只读存储区, 也就是gcc编译器将const修饰的全局变量存储于只读存储区,而不是普通的全局数据区, 那么通过指针p修改g_cc的时候,修改的是只读存储区里面的内存,程序出现崩溃
在现代C语言编译器中,修改const全局变量将导致程序崩溃
标准C语言编译器不会将const修饰的全局变量存储与只读存储区,而是存储于可修改的
全局数据区,其值依然可以改变
六:
七:
const 修饰函数参数和返回值
—— const修饰函数参数表示在函数体内不希望改变参数的值
—— const修饰函数返回值表示返回值不可改变,多用于返回指针的情形
注:——————————————————————————————————
C语言中的字符串字面量存储与只读存储区中,在程序中需要使用const char*指针
example:
#include <stdio.h>
int main()
{
const char* s = "XXXX XXXX"; //字符串字面量
return 0;
}
————————————————————————————————————
八:
总结:
|--------> 标准C编译器 ------> const变量:只读,值可改变
const |---------> 现代C编译器 |-------> const全局变量:只读,值不可改变
|-------> const局部变量 |--------> static局部变量:只读,值不可改变
|---------> 普通局部变量:只读,值可改变