为什么要介绍C语言的const呢?首先声明它和C++中的const不一样。许多人经常.CPP和.C混用,导致C++与C的const分不清,有时候莫名其妙的错误,包括我。当然,这只是原因之一。最主要的原因是C语言的const实在是太虚伪了。所以今天把C语言中这个狡猾的const列出来,以免之后犯错。
用法
首先以int为例定义整形常量a的两种方法:
1 | const int a; |
当然,这两种方法其实是一样的,都代表的是整形常量。对于其他类型也是同样的方法。
不过对于指针,就有点特别了。首先强调,const和 的优先级是 优先级高于const。以下是以字符串为例的
3种定义方法。
1 | const char *p; //char const *p; |
第一种指的是p是指向常量字符型数的指针,所指向的内存数据不可以被修改,但是本身可修改。
第2种指的是p是指向字符型数的常指针,所指向的内存数据可以被修改,但是本身不可被修改。
第3种是指向常量字符型数的常指针,所指向的内存数据补可被修改,本身也不可被修改。
伪常量
用法介绍完了,但为什么说C的const是伪常量呢?因为常量是不可被更改的,但const可以通过简介赋值所改变。我们首先说一下C中的const使用时需要注意的一些细节。
const是伪常量,无法用于数组的初始化和全局变量的初始化,本质就是限定一个变量不能直接赋值。
如以下代码:
1 | 1 #define A 10 |
但是如果局部变量是能够初始化编译并运行的
1 | 1 void main() |
const是伪常量,都知道常量是不能改变值的。例如这样是根本无法编译的。
1 | 1 void main() { |
前面一直强调const是伪常量,因为可以间接的去改变它的值。利用指针变量
1 | 1 void main() { |
结论
c语言的const是冒牌货。C语言const的含义是被称为一个不能被改变的普通变量 ,它会分配内存。