指针、指针常量、常量指针的概念和区分

本文深入解析了C++中指针常量和常量指针的概念,通过实例代码展示了两者的主要区别。指针常量的地址不可变,但其指向的值可更改;常量指针的指向地址可更改,但该地址上的值不可更改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习指针的时候,经常会遇到指针常量、常量指针这两个概念。

指针常量: 就是说指针自己是常量,指针本身的地址不能变,但是指针指向地址的值可以变
常量指针: 指针指向地址的值,是常量不能修改。但是指针本身可以修改,可以让指针指向其他地址。

这两个概念比较绕,下面通过代码对他们进行区分。

指针:

#include <iostream>
using namespace std;
int main(){
	int a = 123;
	int b = 234;
	int *const p = NULL;
	p = &a;
	cout << "addr of a: " << &a << "\t p: " << p << "\t p point to: " << *p << endl;
	
	p = &b;
	cout << "addr of b: " << &b << "\t p: " << p << "\t p point to: " << *p << endl;
}

指针常量:

指针本身的地址不能变,但是指针指向地址的内容可以变

#include <iostream>
using namespace std;
int main(){
	int a = 123;
	int b = 234;
	int *const p = &a;	//p是指针常量,p本身是常量,p的地址不能变
	cout << "addr of a: " << &a << "\t p: " << p << "\t p point to: " << *p << endl;
	*p = b;		//p指向的地址不变,只是地址上存放的值改为变量b的值

	p = &b;		//!!!编译报错, assignment of read-only variable 'p'
	cout << "addr of b: " << &b << "\t p: " << p << "\t p point to: " << *p << endl;
}

初始化:p是指针常量,int *const p = &a 指向 a 的地址

√: 可以通过 *p = b 修改a所在地址的值
×: 不能用 p = &b 来修改p所指的地址


常量指针:

指针指向地址的内容不能变,指针本身的地址可以变

#include <iostream>
using namespace std;
int main(){
	int a = 123;
	int b = 234;
	const int *p = &a;	//p是常量指针,p指向地址的值是常量
	cout << "addr of a: " << &a << "\t p: " << p << "\t p point to: " << *p << endl;
	*p = b;		//!!!编译器报错,assignment of read-only location '* p';
	 
	p = &b;		//可以修改p的地址,即让p指向其他地址
	cout << "addr of b: " << &b << "\t p: " << p << "\t p point to: " << *p << endl;
}

初始化:p是常量指针,const int *p = &a 指向 a 的地址

√: 可以通过 p = &b 修改指针p所指向的地址
×: 不能用 *p = b 来修改a的地址上的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值