指针常量(int *const var)和常量指针(const int *var)

1. 指针常量

也叫常指针,顾名思义,也就是指针的值在初始化之后就不能改变了,即不能改变该指针的初始化指向。
int *cosnt p 这里const是用来修饰限定p的,所以p是一个常量,但是*p是一个变量,也就是说p不能指向新的内存单元(赋予新地址值),但是*p的值可以被改变,同时也改变了p指向内存单元(地址)的值(比如下面的a),同理,改变p所指向的内存单元的值(比如下面的a),也就改变了*p的值。

int a = 10;
int b = 20;
int *const p = &a; //常指针在初始化的时候指向a;
p = &b; //错误,p不能改变指向的内存单元,也就是p的值不能改变
*p = 11;
//*p是变量 因为它不是由const直接修饰的 
//所以它可改变指向内存单元地址的值
//也就是a的值可以被改变 此处a被修改为11
printf("%d",a); //a = 11;
a = 12;
printf("%d",*p); //*p = 12;//也可以通过改变a的值来改变*p的值

2. 常量指针

也叫指向常量的指针,也就是不能通过指针本身去间接修改所指向的常量的值。
const int *p 首先,这里的const是用来修饰限定*p的,*p是常量,即不能修改它所指向的内存单元的值。其次,p并没有const修饰限定,所以p是变量,因此可以修改p的值,即可以修改p指向的内存单元(地址),p可以有新的指向。

int a = 10;
int b = 20;
const int *p = &a; //指向a
*p = 11; //错误 不可通过改变指针本身去间接修改指向内存单元的值
p = &b; //正确 可以修改p的指向,因为p是变量
printf("%d", *p);//*p = 20;

3. 巩固练习

const int a = 10;
int *p;
p = &a; //赋值不合法 const int 型数据的地址赋值给int指针 不合法
p = (int *)&a; //合法赋值 强制转换
*p = 20;
printf("%d", a);//a的值并没有因为指针的赋值而改变  因为a是只读变量 不能被改变值
printf("%d", *p); //*p=20 可以改变
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值