const修饰指针变量

画个图解释一下
在这里插入图片描述
这是数据在内存中的样子,我们创建的指针变量所指的是数据的地址,而对指针进行解引用其实就是通过地址去寻找数据在内存中所在的位置(地址指向的内容)也就是数据本身,了解了这个后让我们来对比一下指针修饰变量的两种情况

  • const在*前

像这样:

	int a = 20;
	const int *p = &a;

这里const修饰的是指针所指向的内容,即*p(内容),这时a的值不能通过指针来修改了

    *p=30;

像这样的修改是不可以的,如果对类似的代码进行运行,编译器会对其报错,如下:
在这里插入图片描述

但指针变量本身是可以修改的
就像这样

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int a = 20;
	int b = 30;
	const int *p = &a;
	p = &b;
	printf("%d", *p);
	return 0;
}

在这里插入图片描述
这里对指针进行解引用打印出的结果是30,也就是b(指针变量发生了改变,也就是地址发生了变话,那么指针的解引用也就是*p就是新地址下所指向的内容)

const*在前时是对*p进行修饰,这时我们把*p“固定”住了,
也就是内容“固定”注了,所以我们不能对*p进行修改;但这时p,
也就是地址并没有被固定,所以p还是可以被改变的。

  • const在*后
    像这样:
	int a = 20;
	int *const p = &a;

这里的const修饰的是指针变量,也就是p,这时p所指的地址就不能更改了

	p = &b;

像这样的修改是不可以的,如果对类似的代码进行运行,编译器会对其报错,如下:
在这里插入图片描述
(跟上边那个报错类型一样)
但指针变量所指向的内容(指针的解引用)是可以更改的
像这样

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int a = 20;
	int b = 30;
	int *const p = &a;
	*p = 100;
	printf("%d\n", *p);
	return 0;
}

在这里插入图片描述
这里对指针进行解引用打印出的是我们赋给*p的100,但指针变量p并没有发生变化,也就是地址没有发生变化,变的是地址所指向的内容

const*后时是对p进行修饰,这时我们把p“固定”住了,
也就是地址“固定”住了,所以我们不能对p进行修改;但这时的*p,
也就是内容并没有被固定,所以这里*p可以被修改

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值