学习笔记分享

分享与展示个人专业知识学习笔记

0%

C语言中const关键字的修饰对象

一般(非指针)变量

对于一般类型(指非指针)变量,const关键字表明该变量为常量,其值不能被修改,声明一个常量和声明一个变量的方法类似:

1
2
const int a;
int const a;

这两种方法等价。

指针变量

对于指针变量,const可能修饰的对象就有指针和指针指向的实体两种了。

1
2
3
const int *pci;
int const *pic;
int * const cpi;

第一种和第二种修饰的是指针指向的实体,第三种则修饰指针。

简单小结一下,就是如果const*(解引用/间接)运算符前,修饰的就是实体;在*后则修饰指针。

多个变量

考虑更复杂的情况,当同时存在多个变量时,const对后续变量是否有效?

利用下述测试代码,通过对const限定符的变量进行修改,可以得到编译器的错误信息,从而得知const的作用范围:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main(void)
{
const int a=1, b=2;
a = b;
b = a;

int const c=3, d=4;
c = d;
d = c;

int e=5,f=6;
int *const pe=&e, *pf=&f;
pe = pf;
pf = pe;

const int *pe2=&e, *pf2=&f;
*pe2 = f;
*pf2 = e;

return 0;
}

result

可见,只有单独对指针进行修饰的const关键字是只作用于单个变量的,其余都是对后续声明生效的。

创作不易,支持一下吧!