如何理解C中的NULLC怎麼給例項返回NULL?

2021-03-06 12:27:32 字數 5605 閱讀 3482

1樓:箬竺

作為一種風格, 很多人不願意在程式中到處出現未加修飾的0。因此定義了預處理巨集null (在和其它幾個標頭檔案中) 為空指標常數, 通常是0 或者((void *)0) 。希望區別整數0 和空指標0 的人可以在需要空指標的地方使用null。

使用null 只是一種風格習慣。前處理器把所有的null 都還原回0, 而編譯還是依照上文的描述處理指標上下文的0。特別是, 在函式呼叫的引數裡, null之前(正如在0 之前) 的型別轉換還是需要。

null 只能用作指標常數。

2樓:匿名使用者

delete t 之後。t為野指標,指向一個你不能用的記憶體,並非是空指標(null)。

通常delete t後要跟一句t = null; 防止野指標的錯誤使用

delete只是刪除t指向的內容

3樓:匿名使用者

null是c語言發明的東西,在c裡面null就是0,這樣說很明白吧

在c++裡面null仍然有效,但不再是0,0就是0,null就是null,通常很少使用null了,null表示當前指標沒有指向任何位置,即允許不指向特定位置的指標存在且合法

4樓:匿名使用者

這裡的 null 其實就是空指標,值的話就是0

因為繼承c的緣故,可以用來作為判斷條件,0為假,其他值為真

delete 後 t 並沒有重新賦值,儲存的是原來的記憶體地址,自然不是0,也就不等於 null

5樓:七星瓢殼蟲

null是0的意思,定義一個數等於null,就是讓這個數等於0.

6樓:不眠之侯

允許空值,及時空值也可以通過

7樓:匿名使用者

null表示空指標,用於表示一個無效的指標。

8樓:匿名使用者

if(t)和if(t == null)是不一樣的、if(t)表示t為真的時候執行括號裡的語句。if(t == null)表示t為空的時候才執行、

9樓:鬆鬆土澆澆水

c++中為什麼要儘量使用0而不是null

10樓:哎呀

你們老師這樣對你說的麼?然後想告訴你,c++最新的規範中(2023年的,也叫c++11)的說法是,null是標準的,但是相容以前的以0等價於空值的寫法。

所以,標準的寫法是null,而不是0。

但是,要在心中建立起這樣的概念,c++程式設計中,所有的資料對電腦來說,都是2進位制的數,無論是數值、字元、圖象,最終電腦能認識的,只是一串串的二進位制的數,如果進一步的去說,電腦只是認2進位制數代表的一個個開關。

所以0在某些條件下,就是null,就是空。null在轉化成其它數值時,也就是0。

此外,各種程式設計環境中,對c++的規範是有一定的差別的,比如vs中的c++,與dev-c中的c++就有一些細節上的不同,並不是在vs中能編譯通過的,在dev中就也能。c++builder中差別就更大了。

11樓:

實質上在c++裡null就是0,只不過是null是巨集定義,效能方面並沒有多大的影響。有些人喜歡直接寫0是因為躍過了巨集替換這麼一個過程。

null的原型定義請看這個連結

c++怎麼給例項返回null?

12樓:匿名使用者

null是對指標而言的,不能用於物件本身

可以這樣:

aa* aa()

另外,c++提倡用0代替null

13樓:魔龍嗜血

aa函式返回的是一個結構體型別的資料,而null :指標變數的零值是「空」(記為null)。所以從型別上來說是不匹配的。

所以把函式的返回型別改為指標函式。即返回一個指標型別的資料。

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

14樓:若葉七夜西

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』。

c++裡如何使用null?

15樓:太特別

在c++裡,null和bai0是通用的,null本身是一du個巨集:

zhi#define null 0,所以和0的用法是一樣

dao的,例如int *p = null;int *q = 0; // 和 int *q = null 一樣char *str = null;等等。回

知識延展:

null本意是

答「空的」;元素只有「零」的意思,計算機中通常表示空值,無結果,或是空集合。在ascii碼的第一個字元是null,它的數值是0,佔用1位元組,c語言把它作為字串的最後一個字元,以表示字串到此結束"\0"。

null與0有著扯不斷理還亂的關係,其實不那麼高深,0本身有著一些原生的特性諸如起始,沒有,正負的分界線,0/1中的0還可以表示否定。

null正需要這些特性中的一部分, 我們只需要清楚null的本質,並在合理的地方才加以利用而非濫用。

c++裡如何使用null

16樓:匿名使用者

在baic++裡,null和0是通用的。(dunull本身是一個巨集:zhi#define null 0)

所以和0的用dao法是一樣的內。例如:容

int *p = null;

int *q = 0; // 和 int *q = null 一樣char *str = null;等等。

17樓:匿名使用者

在抄stdio.h中是這

bai樣定du

義的zhi:dao

#ifndef null

#ifdef __cplusplus

#define null 0

#else

#define null ((void *)0)#endif

#endif

c/c++中,null和null的區別是什麼?

18樓:老夏的小可愛

c語言和c++對大小寫是敏感的,也就知是說null和null是區別對待的。null(如已巨集定義)代表空地址,null(如沒巨集定義)只是一個符號。

1、其實null和null都是字串,具體看它們巨集定義被定義成為什麼值。

2、在vs中null被定義為0,因為習慣上把巨集定義的所有字元都大寫,當把null它賦值給指標時意思為空,當然你也可以把null定義為0了,都一樣。你把0直接賦值給指標也行,只要指標指向0就為空。

3、對於空(null)指標的概念,在 c 標準中明確地定義:值為 0 的整型常量表示式,或強制**換)為「void*」型別的此類表示式,稱為空指標常量。

4、當將一個空指標常量賦予一個指標或與指標作比較時,將把該常量轉換為指向該型別的指標,這樣的指標稱為空指標。空指標在與指向任何物件或函式的指標作比較時保證不會相等。

擴充套件資料

在c中,任何型別的兩個空指標都保證比較相等。前處理器巨集null被定義為實現定義的空指標常量,它在c99中可以可移植地表示為0隱式或顯式轉換為型別的整數值void*(指向void的指標)。

c標準沒有說空指標與指向記憶體地址0 的指標相同,儘管在實踐中可能就是這種情況。解引用空指標是c中的未定義行為,並且允許符合要求的實現假定任何被解除引用的指標不為空。

參考資料

19樓:go陌小潔

null在c/c++標準庫中被定義為一個巨集,一般為:

#define null ((void*)0) /*c中的「標準」寫法,null被替換為一個void*型別的指標右值,值等於0;由於是void*型別,可以隱式轉化為其它型別的指標。

#define null 0 //c++,相對c簡化定義的原因是c++中void*無法自由隱式轉換為其它型別的指標,而字面量0可以隱式轉換為指標型別;儘管它實際上可以被作為整數0使用而不引起編譯問題,但要注意,從設計目的上而言,null應當總是隻作為空指標使用。

char c = null相當於char c = 0,也就是把c初始化為0。0在這裡並不是空指標的意思,而是隱式轉換成的字元'/0'——值為0的char字元。在c/c++的一般實現中,這樣的行為(值為0的數值型別,無論是void*或int,轉換為char的值還是0)是明確的,但這種用法並不恰當。

一如ls的錯誤,ascii及相容字符集中數值0對應的字元為null character(null terminator),應該用nul(沒有在標準庫中定義,語言中char型別用'/0',wchar_t型別用l'/0')而不是null表示。nul的一個重要應用是作為c風格字串的結尾標誌字元。

漢語中的定語和狀語怎麼理解如何理解定語

定語就是句子中名詞性成分的修飾成分,可以讓表達更細膩,更清楚比如 一隻藍色的鳥 其中 藍色的 就是鳥的定語 狀語就是動詞和形容詞性成分的修飾成分,可以讓表達更生動比如 他像獵豹一樣敏捷 他慢慢地沿著海邊跑 像獵豹一樣 就是 敏捷 的狀語 慢慢地 和 沿著海邊 就是 跑 的狀語 如何區分語文的定語和狀...

C中如何讀取中的字串並賦值給string變數

載入d test.txt檔案全部內容並賦值給字串變數s string s system.io.file.readalltext d test.txt using streamreader sr new streamreader f,encoding.default c 中如何把txt檔案裡的字元,讀...

如何理解藝術,如何理解藝術中的再現與表現

藝術是指用形象來反映現實但比現實有典型性的社會意識形態,包括文學 書法 繪畫 雕塑 建築 舞蹈 戲劇 電影 曲藝等。藝術是語言重要補充方法,就像講話中我們會用大聲代表生氣,用笑聲代表開心,用手舞足蹈代表焦急或者其他的心情來傳遞給對方。所以,每件藝術品都應該有他獨特的訴求,這種訴求就是藝術的生命力。藝...