NULLppNULL 的區別,p data item p NULL與p NULL p data item的區別

2021-06-25 14:45:07 字數 4022 閱讀 5281

1樓:瘦成一導閃電呀

if(null != p)和f(p != null)兩者並沒什麼區別,都是判斷指標p是否為空。

但是當考慮到出錯檢查時,if(null != p)寫法更好,因為如果誤寫為if(null = p)的時候,編譯器就會提示出錯(因為常量不能被賦值);而if(p != null)如果誤寫為if(p = null),則編譯器不會報錯

2樓:文件類共創空間

這樣定是為了防止不小心掉了「!」符號,導致程式邏輯出現錯誤,參考如下:

if( intx != 9 )

如果不小心寫成了

if( intx = 9 )

那麼就成了賦值後再判斷了,if表示式的結果恒為true,顯然這不是程式想要的邏輯,

而且這種邏輯錯誤可能要花大量精力才能發現!

if( 9 != intx )

不小心寫成

if( 9 = intx )

程式在編譯階段就會提示出錯,避免了不必要邏輯錯誤。

3樓:

補充:xptlbx說的「使用間接的方法來降低首次寫錯**的可能性」,就是說不使用直接的方法(如用sizeof(double),或定義乙個巨集表示陣列大小等)而是用間接的方法(如用sizeof(*p)),這樣可以避免第一次寫**時的錯誤,尤其是像p = null這樣的錯誤。因為編譯器已經為我們找出來錯誤了。

不過,這幾種技巧雖然可能不直觀,或者寫出來比較長,不易閱讀,卻未必都是間接的方法。

null == p 是不直觀的,但並不間接;

sizeof(*p)其實比sizeof(double)來得更直接,因為它是直接計算物件的大小;

至於sizeof(arr) / sizeof(arr[0])才是一種間接的辦法,而且我本人也認為這個不易閱讀,不一定方便。

都是程式設計技巧問題,不過我也沒看出有什麼異曲同工,可能他認為都很巧妙吧。不過我說的這個是沒錯的,在《c陷阱與缺陷》和《c高階程式設計》中都有提到。

真正與double *p = malloc( sizeof(*p) );

有異曲同工之妙的大概是在kernighan的《程式設計實踐》中提過的計算陣列大小的方法,如列印乙個陣列的元素,可以用:

int i, arr = ;

for (i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)

printf("arr[%d] = %d\n", i, arr[i]);

上面的sizeof(arr) / sizeof(arr[0])就是一種技巧,它可以省去乙個巨集,並且是自動更新的。而且因為是編譯時計算,也沒有執行時的時間開銷。

這個乙個程式設計技巧問題,用

null == p

即把常量寫在等號前面,可以避免把「==」誤寫為「=」,因為這樣一來編譯器就會報錯。

如果用p == null

一旦寫錯為

p = null

大多數編譯器連個warning都不會有。

4樓:匿名使用者

double *p = malloc( sizeof (*p) )與(null == p)之類的表達方式如果說有什麼共同之處的話,那就是使用間接的方法來降低首次寫錯**的可能性。但是,其代價是**不直觀,不符合閱讀習慣,今後維護原始碼的成本增加。

******************************====就象樓上所講的,用特殊的寫法而不是用腦子來寫程式,使得即使把「==」寫成「=」也不怕,這種強烈依靠編譯器來程式設計的方法豈不是非常間接嗎?問題是這個例子很簡單,所以問題不嚴重。可在養成這種習慣後,把程式寫成( x * y / sin(z - 0.

5) + log(w) - tan(sqrt(u)) == p)的話,在一年以後由另外的程式設計師來看,是不是顯得有點怪呢?

另乙個例子也是同樣,使用sizeof(*p)而不是sizeof(double)是多了一層引用。好處是可以避免double *p = malloc( sizeof (float) )之類的錯誤,壞處是每次看到這行程式時腦筋都得多轉一圈。

5樓:匿名使用者

看在什麼環境下了 某些環境下null似乎不能定義為變數名

if(!p) if(p!=null) 這兩種寫法那種比較好? 10

6樓:匿名使用者

void delete(lnode* head) //刪除學生覆信制息

//if(p!=null) //出錯

if(p) //正確

else cout<<"沒有找到該學生資訊\n";

}沒什麼區別,防止敲擊鍵盤是出錯時,編譯器是否能提示報錯。

if(null != p) 如果寫錯寫成if(null = p) 會報錯

if( p!=null )如果寫錯寫成if(p=null) 不會報錯一種程式設計小技巧,沒什麼的

7樓:匿名使用者

使用前面乙個,0的時也可以用!

8樓:全連的希望

這兩個的含義不一樣,不應該是if(!p)和if(p==null)?

9樓:

前面乙個,少按好幾下按鍵呢,,

10樓:大唐行

差不多 還是前面的好些吧 萬一有的編譯器沒定義null

p->data!=item&&p!=null與p!=null&&p->data!=item的區別

11樓:尋夢生

p是null的話第乙個表示式p->data就報錯了。

if(null != p)和if( p!=null )在c語言中有什麼區別 具體是什麼意思!

12樓:天雲一號

if(null != p)和f(p != null)兩者並沒什麼區別,都是判斷指標p是否為空。

但是當考慮到出錯檢查時,if(null != p)寫法更好,因為如果誤寫為if(null = p)的時候,編譯器就會提示出錯(因為常量不能被賦值);而if(p != null)如果誤寫為if(p = null),則編譯器不會報錯。

13樓:量子高巨集亮

沒什麼區別,防止敲擊鍵盤是出錯時,編譯器是否能提示報錯。

if(null != p) 如果寫錯寫成if(null = p) 會報錯

if( p!=null )如果寫錯寫成if(p=null) 不會報錯一種程式設計小技巧,沒什麼的

14樓:匿名使用者

功能是一樣的,只是傳說中如果使用null != p則不容易出錯。因為有些人很粗心地把!=或==寫成=。

但我個人認為還是寫p != null比較好,這樣比較符合習慣。

p!=null與p->next!=null區別?

15樓:

都起作用,前乙個,p就是尾結點,後乙個p是尾結點的前乙個結點,單鏈表需要找到前乙個結點,才能插入和刪除,雙鏈表找到結點本身就可以插入和刪除,修改資料的話,找到結點本身最好!連結串列是儲存資料的,資料才是程式要用的,連結串列只是資料存放的手段!只所以會有各種資料結構,是資料的組織方式要求的,各種資料結構相關的演算法,都是為使用資料服務的!

16樓:匿名使用者

前者是判定p指標本身是否為空,

後者是判定p指向的結構中的next元素是否為空。

c語言裡int *p; if(*p==null)和if(p==null)有什麼區別 我不怎麼理解這

17樓:

帶*號是取值的意思,即取指向位址的值。

所以if(*p == null)是判斷指標p指向的位址儲存的值是否為null

if(p == null)是判斷指標p是否指向null希望對你有幫助。

18樓:聽不清啊

int *p;的話,

*p是乙個int值,所以,if(*p==null)是不對的。

19樓:匿名使用者

不理解慢慢理解。用腦子。。。。。

在c語言中pd和x的區別,在c語言中p,d和x的區別是什麼?

x不要前導0,也就說前面的0會被自動去掉也可以用 08x列印出來跟 p一樣的 實際上是一樣的,不過 p是專用來處理指標的吧,而 x對列印的資料都可以,感覺差不多,就是用 p的時候列印出來都是8個資料的 計算機儲存的都是2進製,當然也可以用 d列印位址,列印指標,指標就是用來存放位址的 位址需要符號麼...

Adobe Reader 9 3做什麼用的PDF又是什麼

是用來閱讀pdf文件的 關於pdf的概念 請看百科解釋,很詳細了 pdf是一種電子書,類似於word文件的一種東西,但是它一般不能直接編輯,只能看內容,要用到adobe reader 9.3來開啟 是一種電子檔案格式。這種檔案格式與作業系統平臺無關,也就是說,pdf檔案不管是在windows,uni...

如何提取pdf檔案中的文字內容,掃瞄的pdf檔案裡面文字怎麼提取出來?

怎樣在pdf檔案中提取部分頁面 pdf檔案如何提取某部分 提取pdf檔案中的文字內容有倆種方式 1.借助文字識別軟體來識別pdf檔案裡面的文字 2.利用工具進行pdf檔案格式的轉換,就是說將pdf檔案轉換為txt文件,這樣就可以提取裡面的文字內容了。以上就是倆種提取pdf檔案中文字內容的方法,希望可...