請參閱下面的一段代碼和我對結果的解釋。需要幫助瞭解指針語義
void f (int * p, int * q)
{
p = q;
*p = 2;
}
int i = 0;
int j = 1;
int main()
{
f(&i, & j);
printf("%d %d\n", i, j);
return 0;
}
我們有兩個全局變量i
和j
,我們通過這兩個變量的函數指針f
。當我們做p = q
時,我們實際上放棄了i
的參考,我們得到兩個指針,即p
和q
都指向j
。那麼當我們做*p = 2
時,我們實際上將j
的值更改爲2
。
然而,正如我們在步驟p = q
丟失的i
基準,在主程序中,獲取打印的i
值是全局變量是0
。因此我們得到結果爲i = 0
和j = 2
。
,請告訴我,如果這是一個正確的解釋...
現在另一個問題是,當我們在函數f做p = q
,它會創建一個內存泄漏,因爲以前由p指向的價值將無法訪問。
「它會創建一個內存泄漏,因爲先前由p指向的值將無法訪問......」:只有在函數f中它纔會不可用。但它仍然是主要的訪問。變量p和q只在'f'中存在,而不是在main或其他函數中。 – 2011-12-22 01:50:46
[comp.lang.c FAQ](http://c-faq.com)是一個很好的資源。第4節討論指針。 – 2011-12-22 02:43:53
這是一個簡單的問題...在問這裏之前檢查cfaq – 2011-12-22 05:07:43