2012-10-05 71 views
3

考慮:第三個例子發生了什麼?

1.

int one=1; 
void func(int* ptr) 
{ 
    ptr=&one; 
} 

int main() { 
int nvar=2; 
int* pvar=&nvar; 
func(pvar); 
std::cout<<*pvar<<std::endl; 
return0 
}; 

仍將輸出2,因爲創建的PVAr的副本嗎?

2.

void func(int*& ptr) 
{ 
    ptr=&one; 
} 

輸出將是1,因爲指針的基準已經通過,所有好的

3.

int one=1; 
void func(int** ptr) 
{ 
    *ptr=&one; 
//or **ptr=one; 
} 
int main() 
{ 
    int nvar=2; 
    int* pvar=&nvar; 
    func(&pvar); 
    std::cout<<*pvar<<std::endl; 

輸出1

我不能沒有詳細說明一個更合適的問題標題,因爲我真的不知道第三個例子是

回答

4

第三個示例與第二個示例非常相似,因爲您仍然將指針傳遞給您的pvar指針。指向指針的指針意味着你可以改變指針所指向的內容。

主要指針之間指針和指針引用( &)差異(* )是每當你傳遞一個指針引用,那麼你的指針已被初始化(非空,具有良好定義的值) 。

+0

+1提到參考不應該是(如果你沒有做明顯愚蠢的事情),永遠不能爲空。 – enobayram

2

第三示例創建一個指向局部變量nvar,含有2,passess指針這個指針func,在那裏它被指針重寫到全球one,含一個。然後打印pvar指向的值,即one,即1。 (在// or **ptr=one的情況下,它將one值放入由指針指向的變量中,即nvar,仍然以相同的輸出結束)。