C语言关键字--- const volatile

来源:互联网 发布:阿里云市场分析 编辑:程序博客网 时间:2024/05/29 04:48

在C语言中const 修饰的变量是只读的(即 此变量不能作为左值),其本质还是变量.

const 修饰的变量会在内存占用空间.

本质上const 只对编译器有用,在程序运行时无用,那么我们在程序运行起来时还是可以通过指针来改变它的值的.

#include <stdio.h>int main(){const int a = 1;int* p = (int*)&a;printf("%d \n",a);*p = 3;printf("%d \n",a);return 0;}
[root@localhost C]# ./a.out 1 3 [root@localhost C]# 


const 口诀:左数右指

当 const 出现在 * 号的左边时,指针指向的数据为常量.

当 const 出现在 * 号的右边时,指针本身为常量.

const  int*  p;                // p可变,p指向的内容不可变;

int  const* p;                // p可变,p指向的内容不可变;

int* const  p;                // p不可变,p指向的内容可变;

const int* const p;      // p和p指向的内容都不可变;


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

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

const int* func(){static int count = 0;count++;return &count;}


volatile关键字 : 

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

volatile 用于告诉编译器必须每次去内存中取变量值;

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

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


编译器在编译的时候发现变量没有当成左值使用,因此会“聪明”的直接将obj替换成其初始化的值,而不去内存中获取.

可能在程序中断改变了值的话,必须加上 volatile 告诉编译器必须每次去内存中取变量值 . 




原创粉丝点击