C語言中的NULLC語言中NULL有什麼作用?具體用法是什麼?

2021-03-06 12:27:33 字數 4709 閱讀 7783

1樓:樂跑小子

在標頭檔案 中 定義的乙個常量 null=0;

用於指將指標 懸空(不指向任何位置)樓上的指向0記憶體不對的.

int *p=null;

null是個好東西,給一出生的指標乙個安分的家

null不是被定義為0,就是被定義為(void *)0,這兩種值幾乎是相同的。當程式中需要乙個指標時(儘管編譯程式並不是總能指示什麼時候需要乙個指標),乙個純粹的零或者乙個void指標都能自動被轉換成所需的任何型別的指標。

null總是等於0嗎?

對這個問題的回答與「等於」所指的意思有關。如果是指「與。比較的結果為相等」,例如:

if(/* ... */)

else

/* ... */

if(p==0)

那麼null確實總是等於0,這也就是空指標定義的本質所在。

如果是指「其儲存方式和整型值。相同」,那麼答案是「不」。null並不必須被存為乙個整型值0,儘管這是null最常見的儲存方式。在有些計算機中,null會被存成另外一些形式。

如果想知道null是否被存為乙個整型值0,可以(並且只能)通過除錯程式來檢視空指標的值,或者通過程式直接將空指標的值列印出來(如果將乙個空指標強制轉換成整型別,那麼=所看到的很可能就是乙個非零值)。

2樓:匿名使用者

c語言null定義,定義如下:

#undef null

#if defined(__cplusplus)#define null 0

#else

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

所以我覺得,如果乙個指標被賦予null,應該就相當於這個指標執行了0x0000這個邏輯位址,但是c語言中0x0000這個邏輯位址使用者是不能使用的(有些人說是因為0x0000沒有對映到實體地址,也有人說是因為0x0000對映到的位址是作業系統用於判斷野指標的,我也不太懂,總之就是使用者不能使用啦),所以當你試圖取乙個指向了null的指標的內容時,就會提示段錯誤,聽著有點繞,看程式:

int *node=null;

int a=0;

a=*node;

printf("%d\n",a);

由於node執行的是null,也就是邏輯位址0x0000,而這個位址用於是不能訪問的,所以編譯器提示段錯誤。

3樓:d小太陽

在c語言中,null和0的值都是一樣的,但是為了目的和用途及容易識別的原因,null用於指標和物件,0用於數值。對於字串的結尾,使用'\0',它的值也是0,但是讓人一看就知道這是字串的結尾,不是指標,也不是普通的數值。

拓展資料:

關於null的使用

程式設計工作中有一模擬較容易犯的錯誤--指標位址未進行正確的更新賦值就加以使用,這往往會造成很嚴重的後果(對記憶體區進行錯誤的塗抹)。所以乙個良好的習慣是,當乙個指標的工作稍事休息,先把它賦值為null,待到再度使用時,重新對其賦值以及進行指標型別轉化。

前面說到"null指標無法再進行任何資料訪問",其實是視編譯器功能而定的。0位置指向的是程式起始,對於不同的編譯器,null指標的操作結果是不同的:有些是不准讀寫,有些是唯讀,甚至讀寫都允許。

編譯器是人定的。

4樓:高金山

#define null ((void*)0)

其值是0,但意義是空指標

'\0'的值也是0,但意義是字串結束符

5樓:陽光沒有眼睛

可以的null別定義為

#define null ((void *)0)

'\0'是字元,ascii是0

6樓:匿名使用者

null的定義是:

#define null (*(void*)0)簡而言之就是乙個打包過的0.

while後面應該填寫

'\0' != *p

因為按照習慣,*p是乙個字元變數.

但是你填

null != *p

或者就是

*p都可以.

7樓:匿名使用者

null, 大寫,有這樣乙個定義: #define null 0 你能看到? 看vc裡邊應該能看到如果沒有小寫null,你也可以這樣:

#define null 0 這樣就可以,呵呵。

8樓:匿名使用者

指標可以賦值null,但數值只能賦值為0.*p是表示指標p指向記憶體塊中的值。所以不能賦值給null。null不相當於0.

'\0'就更不是了。它是表示什麼也沒有。例如指標被賦值了null表示這個指標沒有指向任何位址。在c++中指標可以賦值為0,表示為null。而0表示個數值在c中。

這個**while() 這裡好像有錯誤。

9樓:匿名使用者

反正null就是0,一般用來形容指標是空的.

至於你說的null == '\0' , 只是因為'\0'也是數值0而已

10樓:匿名使用者

tv在 6000008i。,,個

+涼皮。了

11樓:唐甄甄甄

應該是p!=null

c語言中null有什麼作用?具體用法是什麼?

12樓:匿名使用者

null 屬性指定陣列或指標值是否可以為 null。

pre 和 post 特性上允許此屬性,此屬性只能應用於陣列或指標資料型別。

必須通過使用下列值之一來設定 null 屬性:

sa_yes - 此值為 null。

sa_no - 此值不為 null。

sa_maybe - 此值可以為 null。

注意 sa_ 字首對於 c++ 是可選的。

示例下面的**演示如何使用 null 屬性:

以帶有顏色區分的格式檢視複製到剪貼簿列印// c#include

void f([sa_pre(null=sa_no)] char** pc);

// c++

#include

using namespace vc_attributes;

void f([pre(null=no)] char** pc);

c語言中null什麼意思

13樓:

在c語言中,

抄null和0的值都是一樣的,但是為了目的和用途及容易識別的原因,null用於指標和物件,0用於數值

對於字串的結尾,使用'\0',它的值也是0,但是讓人一看就知道這是字串的結尾,不是指標,也不是普通的數值

在不同的系統中,

null並非總是和0等同,null僅僅代表空值,也就是指向乙個不被使用的位址,在大多數系統中,都將0作為不被使用的位址,所以就有了類似這樣的定義

#define null 0

但並非總是如此,也有些系統不將0位址作為null,而是用其他的位址,所以說,千萬別將null和0等價起來,特別是在一些跨平台的**中,這更是將給你帶來災難。

14樓:匿名使用者

null,值為0,一般在c語言中表示空指標

15樓:匿名使用者

#define null 0

怎樣在c語言中輸入null

16樓:匿名使用者

函式的宣告:

char *gets(

char *buffer

);它有乙個引數buffer,指向char型別的指標。指向輸入字串緩衝區位址。如果函式調

內用成功則它的返回容值為buffer的位址,如果呼叫失敗則返回null。

所以while(gets(buff)!=null)這行**就是只要gets函式呼叫失敗就停止迴圈,但一般這個函式呼叫失敗的機率是很小的,所以就出現了死迴圈。要明白這一點必需知道,gets函式的返回值為輸入字串的位址,而null不等於空字串,也不等於空字串的位址。

把那個程式改為如下的形式就對了。

#include "stdio.h"

main()

/*注:strcmp為字串比較的函式,當兩字串相同時返回0*/

17樓:大狂哥灬

null就是空的意思,常用來表示控指標例如 *p=null

18樓:匿名使用者

null可台直接使用

void* p = null;

19樓:

null就是0

#define null 0

直接輸入0就行

c語言程式中的null 和'\0'的區別是什麼?

20樓:召走刀文

null一般表示空指標,也就是這個指標沒有指向任何位址。你也可以簡單的理解為指標變數初始化時賦值

'\0'是字串的結束符。例如字串char *p= "abc";實際上,一共有4個字元,分別是'a' 'b' 'c' '\0',所以當用陣列來儲存這個字串時,就必須至少要有4個元素的陣列。

對於gets函式,當gets函式出現異常時返回null,正常處理是返回字串的指標,這是函式自己定義的。當gets函式異常時,跳出迴圈

library[count].title[0] != '\0'是判斷字串是否是空字串,""就是空字串,但是它裡面是包含乙個'\0'字元的。

所以,當不輸入字元(書名)時,跳出迴圈。

c語言中的,c語言中的EOF

全文結束就是文字的結束,0 是字串結尾字元,在螢幕上敲的話,linux下輸入ctrl d,windows下輸入ctrl z,os下輸入f4,就能輸入eof。兩個while語句,前面乙個判斷讀取字元是否為eof,後面乙個判斷讀取字元是否為換行字元。如果敲回車的話,沒有eof,只有 r,r是回車符。全文...

c語言中switch的含義C語言中的SWITCH是什麼意思?

switch 叫開關 語句,根據條件判斷,選擇某些語句執行。句法 switch k k 是 現在給的值 case 與冒號之間是條件,現在給的值滿足哪個 case 與冒號之間的條件,就執行冒號以下的語句,直到break跳出開關語句。所有的case 與冒號之間的條件都不滿足時,執行default以下的語...

c語言中的double和,C語言中的double和float

double與float的區別在於bai在記憶體中存放數du據時占用的記憶體不一樣 zhi,前者dao8位元組,後者4位元組,也就回是前者儲存的小數字數答 比後者多一倍。舉例說明對於1.9999996666,按照float輸出,結果可能為1.999999,如果按照double可能為1.999999,...