const的各种用法

const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰
的对象为常量(immutable)。


我们来分情况看语法上它该如何被使用。


1、函数体内修饰局部变量。
例:
void func(){
const int a=0;
}


首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量,
我们给它赋予初始值0。


然后再看const.


const作为一个类型限定词,和int有相同的地位。
const int a;
int const a;
是等价的。于是此处我们一定要清晰的明白,const修饰的对象是谁,是a,和int没

有关系。const 要求他所修饰的对象为常量,不可被改变,不可被赋值,不可作为左值(l-value)。

这样的写法也是错误的。
const int a;
a=0;


那么,怎么样才可以修改const修饰的a呢,可以通过指针来修改,

const int num;
int*p = #
*p = 20;
这样是可以被修改的,编译时有一个警告,但可以通过。

然后看一个稍微复杂的例子。
const int* p;
还是先去掉const 修饰符号。
注意,下面两个是等价的。
int* p;
int *p;
其实我们想要说的是,*p是int类型。那么显然,p就是指向int的指针。
同理
const int* p;
其实等价于
const int (*p);
int const (*p);
即,*p是常量。也就是说,p指向的数据是常量。
于是
p+=8; //合法
*p=3; //非法,p指向的数据是常量。


那么如何声明一个自身是常量指针呢?方法是让const尽可能的靠近p;
int* const p;


const右面只有p,显然,它修饰的是p,说明p不可被更改。然后把const去掉,可以
看出p是一个指向 int形式变量的指针。
于是
p+=8; //非法
*p=3; //合法


再看一个更复杂的例子,它是上面二者的综合
const int* const p;


说明p自己是常量,且p指向的变量也是常量。
于是
p+=8; //非法
*p=3; //非法


const 还有一个作用就是用于修饰常量静态字符串。
例如:
const char* name=David;
如果没有const,我们可能会在后面有意无意的写name[4]='x'这样的语句,这样会
导致对只读内存区域的赋值,然后程序会立刻异常终止。有了 const,这个错误就
能在程序被编译的时候就立即检查出来,这就是const的好处。让逻辑错误在编译
期被发现。


const 还可以用来修饰数组
const char s[]=David;

与上面有类似的作用。

同时,const在函数调用过程中也很有用,例如

char * strcpy(char * dest, const char * src)
	{
		while (*dest++ = *src++)
		{
			;
		}
	}

在while(*dest++ = *src++)中,通过const修饰,就可以防止while循环内部写错写反(写反直接报错),可以很大的降低程序bug。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值