指针的指针,指针指向的地址,还有自身的地址之间的关系有些复杂,浅谈一下自己的理解。
#include <iostream>
//#include <fstream>
int test(int a, int b);
int main()
{
using namespace std;
int i = 1, j = 2;
int* p1 = &i;
int* p2 = &j;
int** p3 = &p1;
cout << "i的地址 = " << &i << endl;
cout << "p1=" << p1 << endl;
cout << "p1自身的地址 = " << &p1 << endl;
cout << "p3自身的地址" << &p3 << endl;
cout << "p3 = " << p3 << endl;
cout << "*p3 = " << *p3 << endl;
cout << "**p3 = " << **p3 << endl;
*p3 = &j;
cout << i << endl;
cout << *p1;
return 0;
}
运行结果:
指针自身有自己的地址,p1有自己的地址,其内容为指向的地址,而指向指针的指针p3也有自己的地址,其内容为其指向的地址即p1自身的地址。
对p3一次解引用即p3则可理解为取出p3指向地址的内容,也就是p1自身地址的内容,也就是p1指向的地址&i,再对p3一次解引用得p3就是取出&i地址的存的值也即i,也就是p = i。
以上为本人自身的一点理解,若有错误,欢迎大佬指出修正。