【C语言】const修饰的指针(详解)

本文详细讲解了C语言中const关键字修饰指针的情况,包括constint*p(intconst*p)和int*constp的区别。const放在*的左边修饰指针指向的内容,不允许通过指针修改;放在*的右边修饰指针变量本身,禁止修改指针的值。同时,介绍了intconst*constp,表示指针内容和指针本身都不变。
摘要由CSDN通过智能技术生成

C语言之详解const修饰的指针



在这里插入图片描述

前言

🎐前言: 本文章旨在详细讲解C语言初阶部分关键字cconst在修饰指针变量的时候,放在*前与放在*后两者之间的区别。

🎐本文作者:心已入冬_

🎐发布时间:2023/1/11/


提示:以下是本篇文章正文内容,下面案例可供参考

一、常见关键字const的作用

☃️ 在C语言中,const 是 constant 的缩写,意思是“恒定不变的”!它是定义只读变量的关键字,或者说 const 是定义常变量的关键字。
☃️cosnt修饰的变量被称为常变量,具有常属性,但本质上还是变量
☃️保护被修饰的东西,防止被意外修改,增强了程序的健壮性
☃️ 提高了程序的运行效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,使得它成为一个编译期间的常量,没有了存储和读内存操作,使得它的运行效率也很高。

用const定义常变量的方法很简单,通常在定义变量时前加上const即可。
如:

int main()
{
	const int a = 10;
	return 0;
}
int main()
{
	int const a = 10;
	return 0;
}

以上两种修饰方法是等价的。

注:用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋上初始值。

二、 const int * p (int const * p) 与 int * const p的区别

const 放在*号的左边作用一样,故 const int * p 与int const * p 两者等价。
这里就只拿const int * p 与int * const p 进行比较。

int main()
{
 	const int num = 10;
 	// num = 20;  /当num被const修饰之后,是不能被修改的,所以这里会报错
 
 	int * p = # //但是我把num的地址存放到指针变量p当中时,
 	*p = 20; //p指针解引用,找到p指向的内容num,num的值就会被修改为20
 	
	return 0;
}

我们通过const修饰变量时,就是为了防止num不被修改,而以上案例说明了,通过取地址的方式还是修改了num的值,有违背我们的初衷。
如果想num也不能通过指针变量p来修改值,那我们就需要用const 修饰 int * p,即const int * p.

const 放在*的左边

int main()
{
		int a = 10;
		const int * p = &a;
		/* const 放在*的左边,修饰的是*p,表示的是指针指向的内容,不能通过指针来改变
		 但是指针变量本身是可以被修改的*/
		int n = 20;
		*p = n; // 报错  指针指向的内容不能被修改
		p = &n; // 指针变量p可以修改
		
   return 0;
}

const放在*的右边

int main()
{
		int a = 10;
		int * const p = &a;
		 /*const 放在*的右边,修饰的是指针变量p本身,表示指针变量是不可以被修改的
		 但是 指针指向的内容可以被修改*/
		int n = 20;
		*p = n; // 指针指向的内容可以修改
		p = &n; //报错 指针变量p不能被修改
		
	return 0;
}

三、 int const * const p

若*的左边和右边都被加上了const,则*p(指针指向的内容)和p(指针变量本身)均不能被改变。

总结

提示:这里对文章进行总结:

🥇 const int * p(int const * p) :const 放在*的左边,修饰的是*p,*p(指针指向的内容)不能被改变,p(指针变量本身)能被改变。
🥈 int * const p :const 放在*的右边,修饰的是*p,*p(指针指向的内容)能被改变,p(指针变量本身)不能被改变。
🥉 int const * const p (const int * const p),const 放在*的左边,修饰的是*p和p,*p(指针指向的内容)和p(指针变量本身)都不能被改变。

🔅 若本文章对阁下有帮助,还请阁下多多点赞加以支持我哦!

在这里插入图片描述

  • 33
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿四啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值