[英]What does (char*) 0 mean?
這是一個關於這個問題的問題: (char *)0在c中是什么意思?
答案稍微偏離了解釋究竟是什么答案,但最后的答案提到它是一個指向地址0處的字符的指針,它是空的。 這給我帶來了兩個疑問。
在c中,我們可以給char * 9並說它是指向地址9的指針嗎? 我們不會收到任何錯誤或警告嗎?
好吧,假設(char *)0確實是指向地址0處字符的指針,但這個地址0是什么意思? 我的意思是我們怎么能說它是空的呢? 在那種情況下,(char *)1或(char *)2等的值是多少?
編輯:只是把它放在這里是否有幫助。 當我發現execl
linux系統調用中的最后一個參數為null並且我看到了一個相當奇怪的語法時,我最初搜索這個問題:(char *)0。
謝謝。
(char *) 0
不是“指向地址0處字符的指針”。 在C (char *) 0
以特殊方式處理 - 保證生成類型為char *
的空指針值 。 形式上它不指向任何char
對象。 它的實際數值(“地址”)是實現定義的,可以對應任何地址,不一定是0
。 例如,如果給定平台為char *
type的空指針值保留該地址,則數字(char *) 0
可以產生指向地址0xFFFFFFFF
的指針。 但同樣,從語言的角度來看,空指針值並不能真正指向任何地方。
(char *) 9
沒有這種特殊含義。 (char *) 9
產生的指針也與實現有關。 在大多數實現中,它確實會產生一個指向地址9
的char *
指針。
為了解決(char *) 0
特殊處理,你可以嘗試類似的東西
int i = 0;
(char *) i;
上面的(char *) i
(雖然也依賴於實現)通常會產生一個指向地址0
的char *
指針。 這里禁用特殊處理的關鍵時刻是表達式中的0
不再是常數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.