C语言学习笔记6——const和volatile

const(只读变量)

在C语言中:

  1. const修饰的变量是只读的,本质上还是变量

  2. const修饰的变量在栈上分配空间

  3. const修饰的全局变量在全局数据区分配空间

  4. const只在编译器有用, 在运行期无用

注意: const修饰的变量不是真的常量, 它只是告诉编译器该变量不能出现在赋值符号的左边

/*测试代码*/
#include 

int main()
{
    const int cc = 1;

    printf("cc = %d\n", cc);

    cc = 5;     // error

    // ok
    int* p = (int*)&cc;
    *p = 6;

    return ;
} 

const分析1:const全局变量的分歧

  1. 现代C语言编译器中,const 把具有全局生命周期的变量存储于只读存储区, 修改const全局变量将导致程序崩溃

  2. 标准C语言编译器,const 不会 把具有全局生命周期的变量存储于只读存储区中, 而是存储于可修改的全局数据区, 其值依然可以改变


const的分析2:修饰函数参数和返回值

  1. const修饰函数参数表示在函数体内不希望改变参数的值

  2. const修饰函数返回值表示函数返回值不可改变, 多用于返回指针


volatile关键字

在C语言中:

  1. volatile可理解为“编译器警告指示字”

  2. volatile告诉编译器必须每次去内存中取变量值

  3. volatile主要修饰可能被多个线程访问的变量

  4. volatile也可以修饰可能被未知因素更改的变量

你可能感兴趣的:(C)