关于C/C++中const关键字作用的一些想法

1. const关键字引入

const 即是英文单词 constant 的缩写,常数、常量(在实际使用中,准确的说,应该是“只读”)的意思。在C语言中,const 用于修饰变量,那么程序员就是希望这个变量变为“常量”,但是这里加了引号,因为对于C语言来说,我们还是可以通过指针间接修改。

2. const修饰普通变量和指针变量

C语言中的 const 修饰变量有如下几个特定:

  • const 修饰的变量只是只读的,本质他还是一个变量,并不是常量;
  • const 修饰的局部变量在栈上分配内存空间;
  • const 修饰的全局变量在只读存储区分配内存空间;
  • const 只是在编译期起作用,在运行期间无效。

总的来说,在C语言中,const修饰的变量不是真的常量,它只是告诉编译器这个变量是不能出现在赋值符号的左边(作为左值使用)。

2.1 const修饰普通变量

const int a = 10;
int const a = 10;

a = 20;

上面两种写法都是一样的,const修饰变量a,那么意味着变量a不能通过赋值被改变,只能通过定义时初始化给一个初值。

2.2 const修饰指针变量

修饰指针变量,才是const玩法的精髓。有下面几种情况:

/* 这两种写法是一样的,const修饰的是p所指向的内存空间,就是指针p所指向的内存空间的值(或者是内容)是不允许被修改的 */
const int *p;
int const *p;

/* 这里const修饰的是指针p本身,就是指针所指向的地址是不允许被改变的。例如让指针指向其他地址空间,是不被允许的 */
int * const p;

/* 下面这两种写法意思一样。就是结合了上面的两种情况,指针p的指向不允许改变,指向的内存空间的值也不允许改变 */
int const * const p;
const int * const p;

一个阅读小技巧:去掉类型之后(比如上面的 int 类型),然后看 const 最靠近修饰哪个符号,比如先修饰 * 这个符合,就说明指针所指向内存空间的内容是不允许改变的,比如:const int *p; 。const 先修饰指针变量本身,那么就说明修饰的指针不允许改变指向的地址,比如:int * const p;

3. const修饰的变量是否真的不能改变?

前面说过,C语言中 const 修饰的变量具有的只读属性,是编译器通过语法检查来实现的,也就是说,我们在写代码的时候,骗过编译器,可以间接修改const变量的值。

3.1 C语言中const修饰局部变量的情况

#include <stdio.h>

int main(void)
{
   
   
    /* 定义一个const局部变量 */
	const 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值