2010-12-12 111 views
4

我發現這在期末考試:有人可以幫助我理解這一點嗎? INT *&PR

int a = 564; 
int* pa = &a; 
int *& pr = pa; 
cout << *pr; 

按照選擇題的答案,代碼是有效的,並顯示的值。

但我對第3行的評估和優先次序感到困惑.C狀態的操作順序*和&具有相同的順序。那麼,它會是int *(&pr)?這怎麼可以用文字來描述?

謝謝。

回答

3

這是對指針的引用。在C中,你可以將它表示爲指針的指針。

你可以寫這樣的事情:

// C++ style 
void update_my_ptr(int*& ptr) { ptr = new int[1024]; } 

// C style 
void update_my_ptr_c(int **ptr) { *ptr = malloc(1024 * sizeof(int)); } 

int main() 
{ 
    int *ptr; 
    update_my_ptr(ptr); 
    // Here ptr is allocated! 

} 
+0

有趣。我在C中使用了指針指針,所以這個類比對理解語法非常有用。謝謝! – MercurialMadnessMan 2010-12-13 00:32:53

5

第三行定義了一個指針引用(或者對指針的引用,如果需要的話)。將它指定給一個指針使pr實際上成爲pa的別名,並在評估時指向pa指向的位置,即a

在變量的聲明,*&沒有運營商的意義,所以優先級沒有意義在這裏。

+0

謝謝!這很有幫助。 – MercurialMadnessMan 2010-12-13 00:34:01

1

第三行創建一個指向int的指針的引用(讀取:別名)。如果您要將pr設置爲0,則pa也將等於0(反之亦然)。

相關問題