C语言之const修饰指针变量

我们平时写一些代码时,const是一个被频繁用到的关键字,所以会恰当的使用const关键字是非常重要的,在这里我们学习一下const修饰指针变量时的用法。


目录

1.const的定义

2.const修饰指针变量时的作用

2.1const在指针变量中的应用

2.2const放在*的左边

2.3const放在*的右边

3.总结


1.const的定义

1.const:const关键字修改类型声明的类型或函数参数的类型,防止值发生变化。

2.通俗来说,const放在谁前面,它的值是不可以被修改的,是被锁定的(对整型类来说确实是这样),但对于指针类型来说,const的位置要分两种情况来讨论。

2.const修饰指针变量时的作用

上面也曾提到,讨论它修饰指针变量时,我们要分俩种情况讨论,就是:

1.const放在*的左边;

2.const放在*的右边;

下面我们通过代码来学习它的用法。

2.1const在指针变量中的应用

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	const int num = 10;
	int* p = &num;
	*p = 20;
	printf("%d\n", num);
	return 0;
}

我们来分析一下这段代码,我们在num前使用了const,想要锁定num的值等于10,然后我们把num的地址放入指针中,通过指针改变了num的值,指针抓住了程序的漏洞,改变了num的值,变为20。

所以,想要解决这个问题,我们必须根据实际情况在指针变量前再加一个const来锁定它。

2.2const放在*的左边

int main()
{
	const int num = 10;
	const int* p = &num;
	*p = 20;
	printf("%d\n", num);
	return 0;
}

1.我们在*左边再加一个const后,*p就不可被修改,我们运行代码时,*p=20就会报错:

2.const int* p = &num;等价于int const * p=&num,因为const都在*的左边;

3.但此时,p的值是可被修改的,const锁定的是*p的而不是p,例如:

int main()
{
	const int num = 10;
	const int* p = &num;
	//*p = 20;
	int n = 1000;
	p = &n;
	printf("p=%d\n", *p);
	printf("%d\n", num);
	return 0;
}

我们能清楚的看到,num的值没有被修改,但p的值让修改了,n存入了p中。

2.3const放在*的右边

int main()
{
	const int num = 10;
	int* const p = &num;
	*p = 20;
	int n = 1000;
	p = &n;
	printf("p=%d\n", *p);
	printf("%d\n", num);
	return 0;
}

1.当我们把const放在*右边时,p的值就被锁定,当我们运行这段代码时,p=&n这句代码就会报错:

2.但此时,*p的值是可被修改的,const锁定的值是p的而不是*p:

int main()
{
	const int num = 10;
	int* const p = &num;
	*p = 20;
	int n = 1000;
	//p = &n;
	//printf("p=%d\n", *p);
	printf("%d\n", num);
	return 0;
}

我们看到,num=20;这说明,*p确实修改了num的值,因为p=&n这条代码报错会影响结果的输出,所以这里把它注释掉了,大家可以再自己的机子上尝试。

3.总结

说了这么多,其实是比较乱的,这里给大家系统的总结一下const修饰指针变量:

我们就用这三条代码来说明:int num=10;

                                               int * p=&num;

                                               int n=1000;

1.const放在*左边,const修饰的是指针指向的内容,不能通过指针来改变了,但是指针变量本身可以修改,即:

const int * p=&num;

*p=20;//error

p=&n;//ok

2.const放在*右边,const修饰的是指针变量本身,表示指针变量本身的内容不可被修改,但是指针指向的内容,可以通过指针来改变,即:

int * const p=&num;

*p=20;//ok

p=&n;//error


好了,有关const修饰指针变量的用法我们已经说完了,大家平时多看多记,很快就学会了!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

月亮夹馍干

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

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

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

打赏作者

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

抵扣说明:

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

余额充值