2013-04-20 46 views
0

是否有任何文檔指定應用於C中文字的指針轉換的含義?理解應用於文字時C指針轉換的語義

例如:

int *my_pointer = (int *) 9 

這是編譯器的依賴性或標準的一部分嗎?

編輯:刪除誤導性註釋根據下面的評論,謝謝。

+0

有些情況下我們需要直接指定端口的地址,比如嵌入式系統。 – BLUEPIXY 2013-04-20 10:34:58

+0

該標準沒有說必須有地址9,所以這是非標準的。 – 2013-04-20 12:58:16

回答

5
int *my_pointer = (int *) 9 

這並不指向文字9。它將文字9轉換爲指向int的指針。 C說從整數到指針類型的轉換是實現定義的。

int *my_pointer = &(int) {9}; 

這樣做。它使my_pointer指向int值爲9的對象。

+0

實際上可以嗎?那個int對象的存儲是什麼? – 2013-04-20 10:56:04

+0

@KerrekSB這是一個複合文字,如果在文件範圍聲明'my_pointer'並且在塊範圍聲明'my_pointer'則自動存儲時間是靜態的。 – ouah 2013-04-20 13:34:36

+0

那麼如果它是自動的,它的生命和分號呢? – 2013-04-20 13:35:42

3

指向指針轉換的整數和整數的指針是實現定義的(參見C標準的附錄J)。