【C++之const与指针】

本文深入解析C++中const与指针的三种组合方式:const修饰指针所指内容、const修饰指针本身、同时修饰两者。通过实例演示每种情况下指针的行为,及其对指向值和自身地址修改的限制。

【C++之const与指针】
我们常见的const与指针的组合有三种:
1、const elemType *ptr;
2、elemType *const ptr;
3、const elemType * const ptr;

我们以int类型为例:
一、const int * ptr;
int number = 10 ;
const int* ptr = &number;
第一句话申明了一个整形的变量number,并给他赋值10;第二句话定义了一个int型的指针ptr,ptr指向number的地址,const的作用是防止ptr修改它指向的值(这里是10),而不能防止修改ptr的值(也就是它的地址,下同)。
例如:

int main(void)
{
	int number = 10;
	const int *ptr = &number;
	//以下输出变量和指针的值和地址
	cout << "value of number: " << number << endl;
	cout << "value of *ptr: " << *ptr << endl;
	cout << "address of number: " << &number << endl;
	cout << "address of ptr: " << ptr << endl << endl;;

	int another_Number = 30;
	ptr = &another_Number;  //ptr修改自自己本身的值(他指向的地址发生该改变)
	cout << "value of another_Number: " << another_Number << endl;
	cout << "value of *ptr: " << *ptr << endl;
	cout << "address of another_Number: " << &another_Number << endl;
	cout << "address of ptr: " << ptr << endl << endl;

	another_Number = 40;
	ptr = &another_Number;  //指针修改它的地址
	cout << "value of another_Number: " << another_Number << endl;
	cout << "value of *ptr: " << *ptr << endl;
	cout << "address of another_Number: " << &another_Number << endl;
	cout << "address of ptr: " << ptr << endl << endl;

	//*ptr = 50;  //ptr不能修改它指向的值,执行此句话将报错,*ptr不可被修改
	cin.get();
	return 0;
}

执行结果如下:

根据执行的结果可以看出,指针ptr选后指向了两个不同的地址分别是0x0133FE4C和0x133FE34,但是他不能修改执行指向的值,只能由指向的值自身被修改。

二、int *const ptr;
例如:
int number = 10;
int *const ptr = &number;
这里和一是相反的,ptr可以指修改它指向的值,而无法修改ptr的地址。

int main(void)
{
	int number = 10;
	int * const ptr = &number;
	cout << "value of number: " << number << endl;
	cout << "value of *ptr: " << *ptr << endl;
	cout << "address of number: " << &number << endl;
	cout << "address of ptr: " << ptr << endl << endl;;

	*ptr = 30;
	cout << "value of number: " << number << endl;
	cout << "value of *ptr: " << *ptr << endl;
	cout << "address of another_Number: " << &number << endl;
	cout << "address of ptr: " << ptr << endl << endl;

	int another_Number = 40;
	//ptr = &another_Number; //ptr的地址不可更改,执行此句话将报错

	cin.get();

	return 0;
}

在这里插入图片描述
根据结果可以知道,指针的地址没有发生改变,但是它指向的值已经发生了变化。

三、const int * const ptr;
这里是指ptr不能修改它指向的值,也不能修改它的地址。

const变量与指针连用时候还需要注意:
1、const的数据和非const的数据的地址可以赋值给const的指针。
2、非const的指针只能被非const数据的地址赋值。
3、C++禁止将const数据的地址赋值给非const指针。

有兴趣的同学还可以了解const指针和指针多级间接关系的使用,指针是一门不容易掌握的知识点,博主普通大学生一枚,以上内容属于个人总结,如有出错,还请指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值