空指標和0有什麼區別C語言中空指標0與NULL相同嗎

2021-03-05 07:59:43 字數 3816 閱讀 6020

1樓:匿名使用者

這是與編譯器有關的.

比如byte a=0xff; //它的範圍就定死在0-255之間

word b=0xffff;//範圍就16位數字,更大...

這樣如果強制轉換 成byte,那麼這二個相等,反之強制轉成word當然是後者更大範圍.

在我們人感覺來看 a與b同為0但機器編譯後實際上分配的空間是不同的.

所以在c語言的地方往往 int *p=0與 int *p=null是一樣的.

但是你加了(void*)就代表這是個功能函式指標,而你這個是變數指標;型別當然不配了.

另外還要看看 編譯器在編譯過程中還有選擇性的編譯.#if #else #endif...等.

巨大的**後,不能光看幾行下定論.

2樓:匿名使用者

null的ascii碼值就是0,在c++中,有人推薦直接用0代替null,因為這樣可以少鍵入3個字元。

null可以賦給任意型別的指標。

int *p = (void *) 0; // 涉及到兩次強制型別轉換,在vc++ 6.0中的錯誤資訊是: conversion from 'void*' to pointer to non-'void' requires an explicit cast。

3樓:

很明顯這是不可能的,你肯定漏了東西。

c語言中空指標0與null相同嗎

4樓:匿名使用者

c語言的0和null的確是相同的,null其實是乙個#define定義,在每一種c語言編譯器中都有標頭檔案來定義null這個符號,null的定義類似於這樣:

#define null 0

所以空指標0和空指標null是一回事。

c++裡null和0是相等嗎

5樓:宣威朔漠

null是空位址的意思,在使用指標變數時表示乙個空位址,null的值在「stdio.h」標頭檔案中被定義為乙個值為0的符號常量;即

#define null 0 null的值為00可以表示數字0,也可以表示ascii碼值為0的字元「 」表示字串的長度為0的字串。

千萬別把null與0等同起來。

無論c還是c++,null都是乙個implementation-defined的巨集,是實現相關的。null並不就是0,也不就是(void*)0。只不過,大多數編譯器把null定義為0或者(void*)0而已,但並非所有編譯器都這樣做的。

一些常用的**例如if(fpfile = fopen(....) == ....)應該顯式地跟null比較,而不要只寫if(fpfile = fopen(....

)),這是不良**。

6樓:匿名使用者

null通常用來表示指標的 0 值。

7樓:

功能上相等。概念上不等。

定義空指標時到底是用null還是用0

8樓:匿名使用者

都可以,是一樣的,有興趣可以查詢null是在哪個標頭檔案定義的,並且是如何定義的,一般是:#define null 0

9樓:匿名使用者

必須是null。

null是由編譯器框架定義的值,用於表示指標0值,也即空指標。不同的編譯器會對根據環境做特定的定義。而0在表示式裡是int,是有符號的,雖然編譯器存在隱式轉換,遇到指標運算時會將int轉換為對應的指標型別,但是你不能依賴和保證你的**在今後被移植或複製到其他環境中會被正確轉換。

因此如果使用0賦值指標是帶有僥倖心理的偷懶表現,嚴謹的程式設計師絕對不賭未來,必須保證每個**的明確性。

c++中「null」和「0」的區別是什麼?

10樓:若葉七夜西

0是乙個數字,本身有著一些原生的特性諸如:起始,沒有,正負的分界線,0/1中的0還可以表示否定。0可以表示數字0,也可以表示ascii碼值為0的字元。

null用於將指標指定為空指標,也就是說該指標不指向任何物件,不可以對該指標進行解引用,否則系統會報錯。

在數值上null,'\0',0是一樣的,都是0,但'0'就不同了,在ascii碼中編碼為48,所以字元0和上述三個值不同。

什麼是 null?

[6.3.2.

3-footnote] the macro null is defined in (and other headers) as a null pointer constant

即 null 是乙個標準規定的巨集定義,用來表示空指標常量。因此,除了上面的各種賦值方式之外,還可以用 p = null; 來使 p 成為乙個空指標。

指標的概念

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容:指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。

malloc 函式在分配記憶體失敗時返回 0 還是 null?

malloc 函式是標準 c 規定的庫函式。在標準中明確規定了在其記憶體分配失敗時返回的是乙個 「null pointer」(空指標):

[7.20.3-1] if the space cannot be allocated, a null pointer is returned.

對於空指標值,一般的文件(比如 man)中傾向於用 null 表示,而沒有直接說成 0。但是我們應該清楚:對於指標型別來說,返回 null 和 返回 0 是完全等價的,因為 null 和 0 都表示 「null pointer」(空指標)。

『\0』:『\0』是乙個「空字元」常量,它表示乙個字串的結束,它的ascii碼值為0。注意它與空格' '(ascii碼值為32)及'0'(ascii碼值為48)不一樣的。

在c/c++中,當要給乙個字串新增結束標誌時,都應該用『\0』而不是null或0。

當我們要置乙個指標為空時,應該用null,當我們要給乙個字串新增結束標誌時,應該用『\0』。

指標初始化時設定為0和null的區別?求高手解答~ 5

11樓:匿名使用者

呃,你可以bai這樣理解,null 是關鍵字,du如果將指標的值設zhi置為null,即dao代表當前指標版為空指標,其不指向記憶體權中的任意位址,而當指標設定為0時,其實質是在記憶體中申請一片空間,將0放入,然後將0的記憶體位址賦給指標,指標使用前都要初始化,而許多程式設計師在申明指標或者初始化時都喜歡賦值null,這是良好的程式設計習慣,因為如果你不給指標初始化,指標會隨機的指向記憶體中的任何乙個位址,這就是俗稱的「指標指飄了」,在現在的計算機系統中是沒什麼的,但是早期的計算機系統中輕則記憶體洩漏,重則系統崩潰(現在的作業系統一般都會由系統或者編譯器報錯的),如果還不明白,請繼續追問,謝謝

12樓:灬箬成丶

在編譯器中  null被巨集定義為指向乙個0的位址

也就是說  初始化為null 表示 指向乙個位址  只不過這個位址是空的

13樓:兔子和小強

#define null 0

null即0

14樓:匿名使用者

主要看你心情爽不bai爽而決du定用哪個

null就是0,0就是null

叫你的zhi學名也是

dao專叫,屬叫你的小名也是叫

兩個為一區別就是null 比較專業一點,大多數程式語言都定義null為空的意思。

如果你寫乙個int * p = 0 你告訴我你定義的是null 誰知道了啊

C語言中的0與0有什麼區別,c語言中「!0」和「!!0」是什麼意思?

型別不一樣 0是整形 用 d輸入輸出 0 是字元型 用 c輸入輸出 再應用的時候具體運算也不一樣 例如十進位制運算a 10 0 10 自負運算的話b 0 10 58 按 0 的ascii碼值48計算 在c語言中,0和 0 的區別,有很多.儲存空間方面,整數0可以佔,2位元組 int 或4位元組 lo...

C語言中的空指標,C語言中的空指標是什麼意思?

int p 47 這個用法是不正確的 這個語句等於下邊的 int p p 47 你直接將指標p的值賦值為47是很危險的 應為如果記憶體中位址為47的地方剛好是某個系統程式或關鍵模組佔據的話你進行下面 p 20 的賦值行為 有可能導致系統直接崩潰哦 是的,不過這很危險。而且cpu的32位保護機制也未必...

c語言中和有什麼區別,c語言中的break與Continue有什麼區別

c語言中 和 只在意義乙個方面有區別,具體如下 是關係運算子,而 是賦值運算子。其中c語言中的關係運算子還有 1 是不等於的意思。2 是小於的意思 3 是小於等於的意思。4 是大於的意思 5 是大於等於的意思。擴充套件資料 關係運算子都是雙目運算子,其結合性均為左結合。關係運算子的優先順序低於算術運...