2013-10-19 70 views
0

爲什麼我無法通過函數初始化具有預定義指針變量的引用變量?使用函數將參考變量初始化爲指針

int * f(int * p) { 
    return p; 
} 

int main(){ 
    int s=10; 
    int *p=&s; 
    int *&ref1 = p; //no error given here 
    int *&ref2 = f(p); //gives error cannot initialize int * & with int * why?? 
} 

回答

0

你的價值在這裏返回一個指針:

int* f(int* p) 
^^^^ 

這是一個副本,一個臨時的,這意味着你不能保持對它的引用。

+2

你確定你想提出的「修復」而不看到'f'的實現嗎?你可能只是通過創建編譯器沒有捕獲的懸掛引用來創建下一個更糟糕的問題。 –

+0

@DanielFrey我假設他正在返回'main'內創建的指針。 – 0x499602D2

+0

你將如何獲得該指針?注意'f'的參數是該指針的一個*副本,所以你不能返回一個引用! –

0

這是行不通的,因爲您試圖引用由f(p)返回的指針,該指針是在表達式末尾超出範圍的臨時值。你會創建一個懸掛引用,編譯器阻止你這樣做。