C和指针之const、#define、volatile
来源:互联网 发布:手机淘宝红包怎么领取 编辑:程序博客网 时间:2024/05/17 04:03
1、const
定义const 只读变量,具有不可变形
const int a = 100;编译器通常不为普通Const只读变量分配存储空间, 而是将它们保存在符号表中,
这使得它成为一个编译期间的值,没有了存储与读内存操作,使用效率很高
#define M3 //宏常量 const int N = 5; //此时并没有将N放入内存中 int i = N; // 此时为N分配了内存,以后不再分配内存 int I = M; // 预编译期间进行宏替换,分配内存 int J = N; // 没有内存分配 intJ = M //再次进行宏替换,有一次分配内存
const int *p; //p可变,p指向的对象不可变 int const *p; //p可变,p指向的对象不可变 int *const p; //p不可以变,p指向的对象可变 const int *const p; //p不可以变,p指向的对象不可变
const和#define区别
1、const 给出了对应的内存地址,不像#define一样给出的是立即数,const定义的只读变量在程序的运行中只有一份拷贝,(因为它是全局的只读变量,存放在静态区,,而#define定义的宏常量是在内存中若干的拷贝),所以const修饰的变量只分配一次内存,那个是不是static类型修饰的数据也只分配一次内存?但是用#define修饰的变量赋值给别的变量的时候,别的变量都会分配内存,节省空间,避免不必要的内存分配,同事提高效率。2、#define宏是在预编译阶段进行替换,const修饰的只读变量是在编译的时候确定值,
3、const修饰的只读变量有特点的类型,#define宏没有类型。
3、 valoatile
理解为易变的,这个关键字声明的变量,编译器对方访问该变量的代码不再优化,从而可以提供特殊地质的稳定访问,int i = 0; int j = i; //(1)语句 int k = i; //(2)语句
在(1)(2)中,i没有被作为左值,这个从内存中取出i的值赋值给j,但是这个代码没有丢掉,
而是在(2)中语句中继续用这个值给k赋值,编译器不会从生成的汇编代码里面重新从内存i的值,
volatile int i = 0; int j = i; //(1)语句 int k = i; //(2)语句
volatile告诉编译器,i是谁随时可以改变,每次使用它的时候必须从内存中取出i的值
阅读全文
0 0
- C和指针之const、#define、volatile
- C/C++之#define和const区别
- C++cosnt总结,捎带总结指针引用 define和const
- C的const和volatile
- C/C++ const和volatile
- 搬运工--C关键字union/const/define/typedef/extern/volatile
- C语言中-const,volatile-struct,union-enum,typedef,define
- C++:const和指针
- [C/C++] const和#define的区别
- C/C++:typedef、#define和const
- 程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)
- 【C和指针】const指针
- C/C++中的typedef、#define和const
- C++的const和C语言#define
- Objective-c #define 和 static const
- 【C++】#define和const的区别
- C语言之const常量(摘自C和指针)
- C 类型限定符const 和volatile
- 第二次系统学习css
- Python数据类型
- wamp安装ssl(域名https)
- 机器学习中的数学
- H2数据库使用与管理入门
- C和指针之const、#define、volatile
- 不管怎么选择,都会有遗憾
- 【编程之美】数组分割问题
- Vector与ArrayList和LinkedList区别(简略)
- C语言思考题
- Zbazi in Zeydabad CodeForces
- C++ 多继承的类型转换中遇到的问题(待续)
- 回车焦点到下一个控件
- css的height,min-height,max-height,min-width.....