在Objective-C,我實在無法理解這一點:定義一個指向相同變量名稱引用的引用的指針?
void *x = &x;
我的理解是:
聲明泛型指針(因此,類型爲void *),指針變量名稱爲x,而這指針指向一個名爲x的變量的引用(,應該聲明它已經 - 但它不是)。
非常令我困惑!
在Objective-C,我實在無法理解這一點:定義一個指向相同變量名稱引用的引用的指針?
void *x = &x;
我的理解是:
聲明泛型指針(因此,類型爲void *),指針變量名稱爲x,而這指針指向一個名爲x的變量的引用(,應該聲明它已經 - 但它不是)。
非常令我困惑!
基於@alk答案的理解:
正是因爲你說:
int y = 10;
void* x = &y;
但出來的情況下,X點本身,而不是y
總括是否聲明
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將存儲它自己的地址。
謝謝,有關標識符範圍開始的部分確實是可以回答問題的部分。 – JBL 2014-09-05 11:06:55
請添加評論作爲評論你想評論的答案。或者也爲自己的問題添加一個答案。 – alk 2014-09-05 09:54:45
「應該被宣佈 - 但它不是」 - 是的。宣言的要點來自*起始者之前。一旦你明白了,意思應該清楚。 – 2014-09-05 10:54:25
相關:http://stackoverflow.com/q/16270323/694576 – alk 2014-09-05 10:55:52