int p NULL和 p NULL有什麼區別

2021-06-18 02:33:14 字數 1001 閱讀 1379

很多初學者都無法分清這兩者之間的區別。我們先看下面的**:

int *p = null;

這時候我們可以通過編譯器檢視p 的值為0×00000000。這句**的意思是:定義乙個指標變數p,其指向的記憶體裡面儲存的是int 型別的資料;在定義變數p 的同時把p 的值設定為0×00000000,而不是把*p 的值設定為0×00000000。這個過程叫做初始化,是在編譯的時候進行的。

明白了什麼是初始化之後,再看下面的**:

int *p;

*p = null;

同樣,我們可以在編譯器上除錯這兩行**。第一行**,定義了乙個指標變數p,其指向的記憶體裡面儲存的是int 型別的資料;但是這時候變數p 本身的值是多少不得而知,也就是說現在變數p 儲存的有可能是乙個非法的位址。第二行**,給*p 賦值為null,即給p指向的記憶體賦值為null;但是由於p 指向的記憶體可能是非法的,所以除錯的時候編譯器可能會報告乙個記憶體訪問錯誤。這樣的話,我們可以把上面的**改寫改寫,使p 指向一塊合法的記憶體:

int i = 10;

int *p = &i;

*p = null;

在編譯器上除錯一下,我們發現p 指向的記憶體由原來的10 變為0 了;而p 本身的值, 即記憶體位址並沒有改變。

經過上面的分析,相信你已經明白它們之間的區別了。不過這裡還有乙個問題需要注意,也就是這個null。初學者往往在這裡犯錯誤。

注意null 就是null,它被巨集定義為0:

#define null 0

很多系統下除了有null外,還有nul(visual c++ 6.0 上提示說不認識nul)。nul 是ascii碼表的第乙個字元,表示的是空字元,其ascii 碼值為0。其值雖然都為0,但表示的意思完全不一樣。同樣,null 和0 表示的意思也完全不一樣。一定不要混淆。

另外還有初學者在使用null 的時候誤寫成null 或null 等。這些都是不正確的,c 語言對大小寫十分敏感啊。當然,也確實有系統也定義了null,其意思也與null 沒有區別,但是你千萬不用使用null,這會影響你**的移植性。

remoting和webservice有什麼區別

其實現的原理並沒有本質的區別,在應用開發層面上有以下區別 1 remoting可以靈活的定義其所基於的協議,如果定義為http,則與web service就沒有什麼區別了,一般都喜歡定義為tcp,這樣比web service稍為高效一些 2 remoting不是標準,而web service是標準 ...

remoting和webservice有什麼區別

其實現的原理並沒有本質的區別,在應用開發層面上有以下區別 1 remoting可以靈活的定義其所基於的協議,如果定義為http,則與web service就沒有什麼區別了,一般都喜歡定義為tcp,這樣比web service稍為高效一些 2 remoting不是標準,而web service是標準 ...

unsiged char和char有區別

剛寫完的,就丟了,只好在寫一次。我在進行mac位址轉換的時候遇到的問題,用iphelp獲取mac的時候用的是char複製,而在用cstring format的時候,格式轉換的結果錯誤了,對於大於127的時候多出了ffff之類的東西,我以為是cstring的bug,後來發現不是這樣的,用sprintf...