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