據我所知,在預處理階段,所有出現的NULL代碼都被0代替。然後在編譯過程中,指針上下文中所有出現的0被替換爲表示該機器上爲NULL的適當值。因此,編譯器必須知道該特定機器的NULL值。
現在,這意味着無論何時我在指針上下文中使用0,它都會被代表NULL的適當值代替,該值可能爲0,也可能不爲0.因此,如何告訴編譯器我實際上是0,而不是NULL,當我在指針上下文中使用0時?
對不起,很長的描述。糾正我,如果我錯了如何設置指向零位的指針?
3
A
回答
4
一種方式是所有位零保存到你的指針:
void* zero;
memset(&zero, 0, sizeof(zero));
3
嗯,有實現,在C. C語言沒有提供便攜的特點特別是不移植的方法旨在將指針指向特定的數字地址。然而,顯式整數到指針轉換的「祕密」意圖其實就是:實現整數和指針之間的「自然」映射,其中「自然」通常意味着整數的數值保持不變(如果可能)將其轉換爲指針類型時。換句話說,您需要的只是一個具有0
值的整數。你只需要確保這個整數沒有限定爲一個整型常量表達式,否則它將被識別爲空指針常量。 (簡而言之,您需要一個運行時間積分零點,而不是編譯時間積分零點)。
例如,這
uintptr_t i = 0;
void *p = (void *) i;
通常會產生一個指針指向解決0
。另外,在C語言中(相對於C++)此
const uintptr_t i = 0;
void *p = (void *) i;
還將通常產生一指針指向解決0
。雖然這
void *p = 0; /* compile-time 0 will not do */
將產生實現特定的空指針值。
你也可以看一下C FAQ here,它涵蓋了這個問題。
相關問題
- 1. 指向使用指南針的位置
- 2. 設置後幀指針指向哪裏?
- 3. 設置結構的指針成員,從指針指向結構的指針
- 4. 無法將指針位置設置爲C++中另一個指針位置的指針位置
- 5. 設置指向對象的指針,讓對象指向對方
- 6. 如何設置rootViewController指向指針的地址
- 7. 發佈後設置指針爲零嗎?
- 8. Objective-C:設置傳遞指針爲零
- 9. 指針是否始終設置爲零?
- 10. 指向指針的指針和指向數組的指針
- 11. 指針指向指針
- 12. OpenCV指向位圖處理的指針
- 13. C - 瞭解指向指針的指針並修改內存位置的值
- 14. QTableView和設置指針位置
- 15. 指向Struct的指針的指針
- 16. 指針的再認識不指向正確的內存位置
- 17. 指向指針數組的指針是?
- 18. 什麼是指向指針的指針?
- 19. 指向Char陣列指針的指針
- 20. C++ - 指向數組的指針 - 指針
- 21. 指向C++指針的指針
- 22. 指向結構指針的指針
- 23. 設置指向結構的指針等於指向函數返回的結構的另一個指針?
- 24. 當兩個指針指向相同的位置時更改值
- 25. 創建指向特定位置的指針
- 26. 指針指向無效的位置錯誤C
- 27. 找到鼠標指針指向的位置
- 28. 指針位置重置
- 29. 如何初始化指針指向C中的指針結構?
- 30. 如何從文件讀取指向整型指針的指針?
巧妙的訣竅 - 除了在大多數系統上,當他去零時它會發出砰的一聲。除非他足夠幸運能夠在一個非零NULL的機器上工作(正如我以前; NULL是0xffffffff,所以你可以高興地做*零,看看住在地址0的東西) – pm100 2010-03-09 23:56:03
對。在大多數*系統上,使用像這樣的memset是沒有意義的,因爲從簡單賦值'零= NULL'會得到相同的結果 - 零地址和空指針是相同的。但是,當零不是空指針*和*時,您需要在程序中硬編碼地址,這可能很有用。 – 2010-03-10 00:10:39