C语言中const的用法详解
扫描二维码
随时随地手机看文章
const基本介绍
const是constant的简写,用来定义常量,它限定一个变量不允许被改变,产生静态作用。const最开始推出的目的是为了取代预编译指令,取长补短。与define的对比
- define是预编译指令,定义的宏是在预处理阶段展开的,而const是普通变量的定义,是只读变量,且是在编译运行阶段使用的。
- define定义的是常量,define定义的宏在编译后消失了,它不占用内存,而const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元,除了不能作为数组的长度,用const定义的常变量具有宏的优点,而且使用更方便。
- define定义的对象没有数据类型,编译器只能机械地进行字符替换,没有类型安全检查,即会出现“
边际问题
”或者是“括号问题
”。而const定义的是变量,有数据类型。
修饰局部变量
const int num=5;
int const num=5;
这两种写法是一样的,都是表示变量num的值不能被改变,用const修饰变量时,一定要初始化,否则之后就不能再进行赋值了(后面会讲到一种特殊情况)。接下来看看const用于修饰常量静态字符串,例如:const char* str="techdreamer";
如果没有const的修饰,我们可能会在后不经意间的修改代码,比如str[4]=’D’
,这样会导致对只读内存区域的赋值,使程序异常终止。而加上const修饰之后,这个错误就能在程序被编译的时候立即被检查出来,让逻辑错误在编译期被发现,避免我们在后续中继续debug。修饰全局变量
全局变量的作用域是整个文件,且全局变量的生存周期为程序运行的整个过程,所以我们应该尽量避免使用全局变量,一旦某个函数改变了全局变量的值,会影响到其他引用这个变量的函数,是一个很隐蔽的操作。如果一定要用全局变量,应该尽量的使用const进行修饰,防止不必要的人为修改,使用 const 修饰过的局部变量就有了静态特性,它的生存周期也是程序运行的整个过程,虽然有了静态特性,但并不是说它变成了静态变量。修饰常量指针与指针常量
常量指针
常量指针是指针指向的内容是常量,可以有以下两种定义方式。const int * num;
int const * num;
以下两点需要注意:- 常量指针说的是不能通过这个指针改变变量的值,但可以通过其他的引用来改变变量的值。
int cnt=5;
const int* num=