【C++】33.二级指针 **p

参考原文: https://blog.csdn.net/liangyihuai/article/details/77094996


@zhz
对一级指针取地址,就是二级指针

char *p1;  定义
char **p2;
p2=&p1; 

char*p3=(char*)malloc(100);

*p2=p3; 赋值

p2是一个二级指针,*p2(解引用)是p2指向的位置的值(该值是一个指针),即*p2也是一个指针。再对*p2指向的地址进行解引用,即**p2,值是p2指向的位置保存的指针所指向位置的值!


@转载
通过定义二级指针int **p;可知:

  • p是个二级指针,即指针的指针,该指针p指向的地址A中存放的内容是一个地址(*p);

  • *p是指向另一个地址B的指针。直接给*p赋值,可以改变指针*p的值;

  • **p*p指向的地址中存放的值;


以下给出一个例子:

string *pointer1 = NULL;
string **pointer2 = &pointer1;

string str = "hello";

/*
if (*pointer2 == pointer1) 
	cout << "*pointer2 == pointer1" << endl;
else 
	cout << "*pointer2 != pointer1" << endl;
*/

*pointer2 = &str;

cout << *pointer1 << endl;

//执行结果
//*pointer2 == pointer1
//hello

上面例子中:
pointer2 是个二级指针,*pointer2 也是个指针,代表pointer1在内存中的地址,即*pointer2 等价于&pointer1

str的内存地址(&str)赋值给*pointer2 后,指针pointer1的内存地址(&pointer1)就和str的内存地址(&str)一样了。 指针pointer1str的内存地址一样,那么他们内存地址中的值*pointer1就和str的内容"hello"一样了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值