int k=7;
void f(int **s)
{
int t=&k;
*s=t;
_printf("%d,%d,%d,",k,*t,*s);_
}
main()
{
int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%d\n",i,*p,**r);
}
/*
VC++程序運行結果為:
7,7,7,3,7,7
*/
求解C程序裡第二個printf的結果為何是3,7,7呢?如果f(r)把r的地址改變了,p的地址也跟著變嗎?那i的地址不是也跟著p也改變了嗎?結果應該是7,7,7啊?求大俠幫忙解答
這個問題和你提的另一個問題,突破點都一樣,我已經回答了。把 “變量”“ 指針” “指針的指針”這三個概念理解透了,這類問題你就不會再困擾了。
他們最終牽涉到兩個概念“地址” “值”
比如一條無限長的走廊上有無限多個房間,我們每個房間給一個唯一門牌號 1、 2 、3、 5 ……
這個編號就是每一個房間的“地址”,房間裡面放的物品就是它的“值”
變量:就相當於一個房間, 它有一個編號,而且裡面放物品。
指針:相當於兩個房間,一個房間裡面存放的是另一個房間門牌號,我們需要通過房間裡面的門牌號才能找到存放物品的房間取得物品。
指針的指針:相當於3個房間,第一個房間裡放著第二個房間的門牌號,第二個房間裡放著第三個房間的門牌號,第三個房間裡存放的才是物品,
我們必須通過前面兩個房間才能找到存放物品的那個房間取得物品。