标签:style color io 使用 strong ar 数据 div sp
const为constant的缩写,是恒定不变的意思。被const修饰的值,是只读变量
1.const修饰只读变量,具有不变性
#include <stdio.h>
int main()
{
const int Max = 100;
Max = 10;
return 1;
}
const修饰的只读变量必须在定义的同时初始化,同时之后不能修改。在Linux下将报错“error: assignment of read-only variable “Max”
2.节省空间,避免不必要的内存分配,同时提高效率
const推出的初始目的,是为了取代预编译指令,消除它的缺点,同时继承他的优点。可以看下他和define的区别,编译器通常不为普通const只读变量分配存储空间,而是将他们保存在符号表中,这使他成为一个编译期间的值,没有了存储于读内存的操作,使得他的效率也提高
#include <stdio.h>
#define M 3 //宏常量
const int N = 5; //此时并未将N放入内存中
int main()
{
int i = N; //此时为N分配内存 ,以后不再分配
int I = M; //预编译期间进行宏替换,分配内存
int j = N; //没有内存分配
int J = M; //在进行宏替换,又一次分配内存
}
const定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的只读变量在程序运行过程中只有一份备份(因为它是全局的只读变量,放在静态区),而#define定义的宏常量在内存中有若干个备份。#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。#define宏没有类型,而const修饰的只读变量具有特定的类型。
3.const修饰变量
const char *str; //const修饰*str,意味着不能通过指针str改变其指向的对象
char * const str; //const修饰 str,意味着指针str不能够改变
const char * const str; //第一个const修饰*str,意味着不能通过指针str改变其指向的对象;第二个 const修饰str,意味着指针str不能够改变
标签:style color io 使用 strong ar 数据 div sp
原文地址:http://www.cnblogs.com/xiaoxing/p/3955475.html