C++實(shí)現(xiàn)指針空值的示例代碼
在良好的C/C++編程習(xí)慣中,聲明一個(gè)變量時(shí)最好給該變量一個(gè)合適的初始值,否則可能會(huì)出現(xiàn)不可預(yù)料的錯(cuò)誤,比如未初始化的指針。如果一個(gè)指針沒(méi)有合法的指向,我們基本都是按照如下方式對(duì)其進(jìn)行初始化:
void TestPtr() { int* p1 = NULL; int* p2 = 0; // …… }
但是在C++中,我們推薦使用它:
int* p3 = nullptr;
前者中,NULL和0在C++其實(shí)是等價(jià)的,都不規(guī)范。NULL實(shí)際是一個(gè)宏,在傳統(tǒng)的C頭文件(stddef.h)中,可以看到如下代碼:
#ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif
如果沒(méi)有定義宏,如果在cplusplus里,NULL被定義成0??梢钥吹剑琋ULL可能被定義為字面常量0,或者被定義為無(wú)類(lèi)型指針(void*)的常量。不論采取何種定義,在使用空值的指針時(shí),都不可避免的會(huì)遇到一些麻煩,比如:
程序本意是想通過(guò)f(NULL)調(diào)用指針版本的f(int*)函數(shù),但是由于NULL被定義成0,因此與程序的初衷相悖。
在C++98中,字面常量0既可以是一個(gè)整形數(shù)字,也可以是無(wú)類(lèi)型的指針(void*)常量,但是編譯器默認(rèn)情況下將其看成是一個(gè)整形常量,如果要將其按照指針?lè)绞絹?lái)使用,必須對(duì)其進(jìn)行強(qiáng)轉(zhuǎn)(void *)0。
注意:
- 在使用nullptr表示指針空值時(shí),不需要包含頭文件,因?yàn)閚ullptr是C++11作為新關(guān)鍵字引入的。
- 在C++11中,sizeof(nullptr) 與 sizeof((void*)0)所占的字節(jié)數(shù)相同。
- 為了提高代碼的健壯性,在后續(xù)表示指針空值時(shí)建議最好使用nullptr。
到此這篇關(guān)于C++實(shí)現(xiàn)指針空值的示例代碼的文章就介紹到這了,更多相關(guān)C++ 指針空值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)宿舍管理課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)宿舍管理課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C語(yǔ)言數(shù)學(xué)問(wèn)題與簡(jiǎn)單DP01背包問(wèn)題詳解
這篇文章主要介紹了C語(yǔ)言數(shù)學(xué)問(wèn)題買(mǎi)不到的數(shù)目、螞蟻感冒、飲料換購(gòu)與簡(jiǎn)單DP01背包問(wèn)題的解決,屬于藍(lán)橋杯省賽中的題目,感興趣的同學(xué)來(lái)看看吧2022-04-04C++ 基數(shù)排序的實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了C++ 基數(shù)排序的實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,這里附有實(shí)例代碼,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下2016-11-11C++超詳細(xì)講解標(biāo)準(zhǔn)庫(kù)
C++強(qiáng)大的功能來(lái)源于其豐富的類(lèi)庫(kù)及庫(kù)函數(shù)資源。C++標(biāo)準(zhǔn)庫(kù)(C++ Standard Library, 亦可稱(chēng)作,C++標(biāo)準(zhǔn)程序庫(kù))的內(nèi)容總共在50個(gè)標(biāo)準(zhǔn)頭文件中定義。在C++開(kāi)發(fā)中,要盡可能地利用標(biāo)準(zhǔn)庫(kù)完成2022-06-06

一波C語(yǔ)言二元查找樹(shù)算法題目解答實(shí)例匯總