課程
/后端開發
/C++
/C++遠征之離港篇
if(NULL==P)
NULL==P與P==NULL有什么區別
2016-05-16
源自:C++遠征之離港篇 5-2
正在回答
int *p = NULL;?定義一個指針變量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 本身的值, 即內存地址并沒有改變。?
StevenW 提問者
舉報
C++掃清通往面向對象的最后一道障礙,將所有知識點融會貫通
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-05-16
int *p = NULL;?
定義一個指針變量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 本身的值, 即內存地址并沒有改變。?