当有多重指针时,如果要弄一个等式,一边是*pi一边是&,这两个符号的关系是怎么样的,当有多重的时候感觉立马就迷糊啦
指针指向的不是一个数字,而是一个int指针。
*ppi就是ppi这个指针指向的存储变量,让它存储pi这个变量的地址。
&pi,取出指针,即pi的地址。*ppi,指针变量。
就跟A=2一样。*ppi是A,&pi是2
&是取指针,*是取值。
讲起来都是很抽象的,书本上也是一样的。
搞清楚一个应用场景可能能帮助理解。
比如:
void changeNum(int* pi)
{
*pi = 100;
}
int main()
{
int a = 0;
changeNum(&a);
}
上面的应用场景是在被调函数改变传参的值。
void f1()
{
}
void f2()
{
}
void changeFunction(void* * ppf)
{
*ppf = f2;
}
int main()
{
void* pf = f1;
changeFunction(&pf );
}
如果要在传参中改变传入的指针就要用指针的指针,貌似除了这样的场景,滥用指针的指针就会显得不是很优雅
很简单ppi的内存中存储着pi的地址
pi 是一个变量, &是取地址符。 &pi就是取这个变量的地址,最终得到的是一个地址。
ppi是指向指针的指针。
指针:它本身也是一个变量,它所存的值是另一个变量的地址。
指针的指针:他本身也是一个变量,它所存的是一个指针的地址。
*ppi 是取得ppi所存放的值,这个值是一个地址。
所以 *ppi = &pi, 等式两边都是地址,可以赋值。