参考原文: 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
)一样了。 指针pointer1
和str
的内存地址一样,那么他们内存地址中的值*pointer1
就和str
的内容"hello"
一样了。