C/C++指针解惑(**p,*p,&p)

  • 直接上代码,请看注释解释
struct TT
{
	int a;
	int b;
	TT()
	{
		a=2333;
		b=2333;
	}

};

int main()
{
TT* p1=new TT; //定义并生成一个TT类型的指针

TT* p2=p1;		//新定义一个TT 类型的指针,地址与p1的地址相同(作为p1副本)
				//注意该指针虽然没有进行动态内存分配,但是占有与p1相同的内存块。
p2->a=22;
p2->b=222;		//修改p2指向的值,由于p2与p1地址相同,p1的值也被修改

TT** p3 = &p1;	//新定义一个二级指针,该二级指针指向存储p1地址值的地址
				//那么通过修改p3地址的地址指向的值就可以同步修改p1指向的值
				//注意该指针没有进行动态内存分配
(*p3)->a=33;	
(*p3)->b= 333;

TT*& p4= p1;	//通过引用,那么p4即是p1的别名,修改p4即使修改p1
p4->a=44;
p4->b=444;

TT tmp;
p2=&tmp; //因为p2是副本 ,所以可以重新指向新的地址,对p1,p3,p4的值都没有影响。

p3=&p2;	//p3指向的地址为p2的,所以其存储的为p2的地址,存储的为p2的内容,对p1,p4无影响。

p3=&p1;
(*p3)=p2; //将p3存储的指针还原为p1,再将存储的指针修改成p2,即直接把p1的地址修改成了p2,那么将会影响p1,p4;


return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值