2014-09-05 53 views
3

在Objective-C,我實在無法理解這一點:定義一個指向相同變量名稱引用的引用的指針?

void *x = &x;

我的理解是:

聲明泛型指針(因此,類型爲void *),指針變量名稱爲x,而這指針指向一個名爲x的變量的引用(,應該聲明它已經 - 但它不是)。

非常令我困惑!

+0

請添加評論作爲評論你想評論的答案。或者也爲自己的問題添加一個答案。 – alk 2014-09-05 09:54:45

+0

「應該被宣佈 - 但它不是」 - 是的。宣言的要點來自*起始者之前。一旦你明白了,意思應該清楚。 – 2014-09-05 10:54:25

+0

相關:http://stackoverflow.com/q/16270323/694576 – alk 2014-09-05 10:55:52

回答

2

對於C和C++:

x被分配自己的地址。事後指向自己。

+0

這並不能解釋如何在同一行上爲自己指定一個變量的地址(在這種情況下,它是指針)你聲明:/ – JBL 2014-09-05 09:51:37

+0

gcc管理這個沒有任何抱怨。 @JBL – alk 2014-09-05 09:53:09

+0

所以完全取決於編譯器來弄清楚這種特殊情況?我無法找到可以解釋這種情況的標準中的任何相關內容。 (然後,這遠不是我會說的微不足道的)。 – JBL 2014-09-05 09:57:09

0

基於@alk答案的理解:

正是因爲你說:

int y = 10; 
void* x = &y; 

但出來的情況下,X點本身,而不是y

5

總括是否聲明

void *x = &x; 

是有效的,您應該考慮C標準中的兩個重要引號。

第一個表示其中的標識符開始的部份範圍(標識符6.2.1作用域)

7結構,聯合和枚舉標籤具有範圍,標籤的出現之後開始只是 一個聲明 標籤的類型說明符。每個枚舉常量的範圍在枚舉器列表中定義的枚舉器出現後立即開始。 任何 其他標識符的範圍僅在其聲明者 完成後開始。

第二個說,任何類型的指針是否可以被分配給一個指向void(6.3.2.3指針)

1中的孔隙的指針可被轉換成或從一個指針到任何 對象類型。 指向任何對象類型的指針可能會被轉換爲 指針,並返回空值;結果應該等於 的原始指針。因此,在這個聲明

void *x = &x; 

variabble x的範圍內立即賦值運算符之前啓動。它的完整類型是void *,它可以被分配任何其他類型的指針。在右邊有void **類型的表達式。根據第二個引用,它可以分配給x,因爲x是指向void的指針。

由於結果x將存儲它自己的地址。

+0

謝謝,有關標識符範圍開始的部分確實是可以回答問題的部分。 – JBL 2014-09-05 11:06:55