C++笔记:const 修饰指针问题

1.const 修饰指针——常量指针

int a=10;
int b=30;
const int *p=&a;  //此为常量指针,指针指向可以改,指向的值不可改
*p=b;  //此句非法,会报错
p=&b;  //此句正确

eg.

#include <iostream>
using namespace std;

int main(){
	int a=10,b=30;
	const int *p=&a;
	cout<<"*p(p指向的值)="<<*p<<endl;
	cout<<"p="<<p<<endl;
	cout<<"b的地址&b="<<&b<<endl;
	p=&b;
	cout<<"此时指针指向:"<<p<<endl;
	cout<<"*p(p指向的值)="<<*p<<endl;
	cout<<"a的值为:"<<a<<endl;
	cout<<"const int *p"<<endl;
    return 0;
}

运行结果如图:

示意图:

由图知,当定义const int *p(常量指针)时,指针p的内容可以由a的地址变为b的地址,即由0018FF44变为0018FF40,但a的值不会变!即经过上述代码操作后,指针p由原先指向a变为指向b。

2. const 修饰常量——指针常量

int a=10;
int b=30;
int *const p=&a;  //此为指针常量,指针指向值可以改,指向不可改
*p=b;  //此句正确
p=&b;  //此句非法,会报错

eg.

#include <iostream>
using namespace std;

int main(){
	int a=10,b=30;
	int *const p=&a;
	cout<<"*p(p指向的值)="<<*p<<endl;
	cout<<"p="<<p<<endl;
	cout<<"b的地址&b="<<&b<<endl;
	*p=b;
	cout<<"此时指针指向:"<<p<<endl;
	cout<<"*p(p指向的值)="<<*p<<endl;
	cout<<"a的值为:"<<a<<endl;
	cout<<" int *const p"<<endl;
    return 0;
}

运行结果如图:

示意图:

当定义int *const p(指针常量)时,指针的指向固定,即指向a的内存区,且不可再指向别的内存区域(如b),但指向的内容可以修改,如代码结果a的值由10被修改为30

3.const既修饰指针又修饰常量

int a=10;
int b=30;
const int *const p=&a;  //指针指向值与指向均不可改
*p=b;  //此句非法,会报错
p=&b;  //此句非法,会报错

4. Summary

记忆方法:const在谁左边,谁不能变:

const int *p;  //const在*p左边,即指针p指向的内容不可变
int *const p;  //const在p左边,即指针p的内容不能变
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值