const的妙用

const在许多编程语言中都有着很大的用处,接下来我们来说说它在c语言中的一些用法.const的作用可以概括为定义常变量(让变量只读,不可改写---不能做左值),用下面的例子详细说明一下:

int a=10;//a可读可写
int b=a;//b读取a的值;
a=20;//a作为左值完成写操作重新赋值成20;
但是这样定义是不对的:
const int a;

先定义的是一个整形变量a,前加const又认为a的值不可变,所以这样定义毫无意义.若是直接给a赋值还是可行的.

特殊用法

1.数据类型对于const来说透明,即要指明变量的数据类型

const int a;
int const a;//const放在数据类型的前后都可以

2.修饰指针(const修饰它的直接右边)

int a=10;
int b=9;
const int *p1=&a;//可以写成int const *p1=&a;
*p1=200;//不可行
p1=&b;//可行

很明显const修饰的直接右边是*p1,*p1不可以作为左值.接下来对上面例子做深入探究:

int*const p3=&a;
p3=&b;
*p3=400;

const int *const p4=&a;
 p4=&b;//p4不可做左值
*p4=700;*p4不可做左值

第一个分析过了,我们说说黄色部分为什么不对,const多了也没关系,我们就记住一点-------const修饰它直接右边,谁和它亲密修饰谁,内部的const修饰p4,p4不可以做左值;外部的const修饰*p4,*p4不可做左值.通过一系列的分析不难得出 权限可以同等的传递,缩小传递,唯独不能放大传递.其实很容易理解,就相当于上司的权限大于下部,顶多平起平坐,下部的人都骑到上司头上恐怕不合适吧.
3.用于函数变量的声明
例如:字符串赋值函数 void mystrcpy(char* des,const char *str)将str内容拷贝给des,自然不能让*str做左值;在定义函数时进行必要的描述能减少麻烦,即使函数体的编辑有问题我们也能很快找到问题在哪.

猜你喜欢

转载自blog.csdn.net/zhanxiao5287/article/details/79967624