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做左值;在定义函数时进行必要的描述能减少麻烦,即使函数体的编辑有问题我们也能很快找到问题在哪.