常量指针初始化的思考


总结

常量指针是顶层const,必须初始化!
而指向常量的指针初始化常量指针是错误的,所以只能使用普通指针,普通变量的地址,常量指针这三者之一初始化常量指针!!!


引申:const成员函数与this指针

成员函数会隐式定义this形参,这使得我们可以在成员函数内直接使用该函数的对象的成员,而不必使用作用域运算符显式声明。
这决定了this指针的性质,this指针是一个常量指针,一旦初始化,不能再指向别的对象。
而如果该函数的对象是一个常量对象,那么我们无法把this指针绑定到常量对象上(指向常量的指针初始化常量指针是错误的)。
显然,我们需要将this指针声明为指向常量的常量指针,但是this指针是隐式声明的,怎么办?
c++允许我们在成员函数的参数列表之后声明const,表示this是一个指向常量的常量指针,这样的成员函数称为常量成员函数,如果成员函数体中没有对成员进行修改,尽量把此成员函数声明为常量成员函数。

注:常量对象,常量对象的引用或指针都只能使用常量成员函数!

#include <stdlib.h>
#include <stdio.h>


int main() {
	
	//常量指针
	const int a = 1;
	int b = 2;
	int * const p = &b; //普通指针初始化常量指针
	*p = a; //正确 p可修改
	int * const p1 = p; //常量指针初始化常量指针
	
	
	//int * const p2 = &a;  //错误,&a为const int *类型(可理解为指向常量的指针),不能初始化int * const(常量指针)
	
	//指向常量的指针
	const int * p3; 
	const int * p4 = &a; //指向常量的指针初始化指向常量的指针
	const int * p5 = &b; //普通指针初始化指向常量的指针


	//指向常量的常量指针
	const int * const p6 = &a;
	const int * const p7 = &b;
	const int * const p8 = p;

	//正确
	int c = 3;
	const int d = c;
	int f = d;
	
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值