很多初學者都無法分清這兩者之間的區別。我們先看下面的**:
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...