首页 > 代码库 > const关键字
const关键字
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不能够改变
const离哪个近,就修饰谁。
const修饰函数的参数,当不希望这个参数值在函数体内被意外改变时使用:const void fun(const int run)
告诉编译器run在函数体内不能被改变,从而防止了使用者的一些无意的或者错误的修改
1)如以“指针传递”方式的函数返回值加const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。例如函数:
const char * GetString(void);
如下语句将出现编译错误:
char *str = GetString();
正确的用法是
const char *str = GetString();
例如不要把函数char GetString(void) 写成constchar GetString(void)
同理不要把函数A GetString(void) 写成const A GetString(void),其中A 为用户自定义的数据类型。
const关键字