const变量与指向常量的常量指针

本文详细探讨了C语言中const关键字在变量和指针中的应用,包括只读变量、指向常量的指针、常量指针以及指向常量的常量指针。通过实例解释了const如何限定指针及其指向的数据,以及不同const位置带来的差异和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言中的变量与常量,顾名思义,可变与恒定。

const的存在就是将变量修饰为常量,即让变量变为只读属性。(并不是真的变为常量)

只读的变量

使变量属性变为只读,像常量一样无法通过赋值进行更改。

定义方式:

	const int cnum = 1024;

那么,cnum就是类似常量的只读变量,我们就无法再使用赋值语句对它保存的数据进行更改。

指向常量的指针:

指针本身可以更改指向,但是所指向的变量的数据不可通过解引用的方式更改。

定义方式:

	const int *pc = &cnum; 

const int 为指向整形常量的指针,它可以改变指针pc的存储(就是指针的指向),不可通过解引用改变指针所指数据。

以上我们是使用了指向常量的指针*pc指向了只读的变量cnum。

如果我们这么做:让普通指针指向只读变量,并对其解引用来更改数据。

        const int cnum = 1024;
        int *p = &cnum;

这是一件很矛盾的事情,cnum为只读属性,但是*p为普通指针,是可以通过p更改p所指向变量的数据的。

于是会出现Warning:赋值从指针目标类型中丢弃“const”限定符 。 也就是说出现冲突,const这个限定符号被丢弃了。cnum又变为普通变量。

也就是说,如果我们定义的只读变量不想被指针用解引用的方式进行修改,只能将指针定义为指向常量的指针。

 我们再让const修饰的指针pc指向普通变量:

        int num = 520;
        const int *pc = # 

也就是说指向常量的指针现在指向的不是只读变量,是普通变量,

再次指向*pc = 888;语句,会发生什么?

答案是编译器报错,也即是说,如果指向常量的指针指向了变量num,也不可通过对指针pc解引的方式来改变num的数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值