指針不能持有非地址值例如下面的賦值將導(dǎo)致編譯錯(cuò)誤
// 錯(cuò)誤pi 被賦以int 值ival
pi = ival;
指針不能被初始化或賦值為其他類(lèi)型對(duì)象的地址值例如已知如下定義
double dval;
double *pd = &dval;
那么下列兩條語(yǔ)句都會(huì)引起編譯時(shí)刻錯(cuò)誤
// 都是編譯時(shí)刻錯(cuò)誤
// 無(wú)效的類(lèi)型賦值: int* <== double*
pi = pd;
pi = &dval;
void*表明相關(guān)的值是個(gè)地址但該地址的對(duì)象類(lèi)型不知道
void *pv = pi;
pv = pd;
=======================
(1)無(wú)論是*p=0還是*p=1,都不是給指針賦值,而是讓指針指向的整數(shù)的值為0或1。這個(gè)指針如果沒(méi)有初始化的話,直接寫(xiě)這兩個(gè)語(yǔ)句會(huì)出運(yùn)行時(shí)錯(cuò)誤。
(2)要讓指針的地址值等于一個(gè)整數(shù)值,如果不用類(lèi)型轉(zhuǎn)換的話,除了0,其他都是不允許的。
C/C++ code
p=0; //合法,表示p是空指針
p=20345686;//非法,目的是要使指針ptr指向地址20345686(十進(jìn)制)
(3)但是加類(lèi)型轉(zhuǎn)換后,可以直接用整數(shù)給指針賦值 C/C++ code p = (int*)20345686; //合法int *p=1; //指針p的地址值是1
*p=1; //p所指向的整數(shù)的值為1 我們知道當(dāng)取一個(gè)int 型對(duì)象的地址時(shí)int *pi = &ival;結(jié)果是int*——即指向int 的指針當(dāng)我們?nèi)≈赶騣nt 型的指針的地址時(shí)int **ppi = π
結(jié)果是int**——即指向int 指針的指針當(dāng)我們解引用ppi 時(shí)int *pi2 = *ppi;string 構(gòu)造函數(shù)的第二種形式定義了一個(gè)空字符串例如string st2; // 空字符串我們?cè)鯓幽鼙WC它是空的當(dāng)然一種辦法是測(cè)試size()是否為0if ( ! st.size() )// ok: 空更直接的辦法是使用empty()操作if ( st.empty() )// ok: 空如果字符串中不含有字符則empty()返回布爾常量true 否則返回false可以將一個(gè)C 風(fēng)格的字符串賦給一個(gè)string 對(duì)象string s1;const char *pc = "a character array";s1 = pc; // ok但是反向的轉(zhuǎn)換不能自動(dòng)執(zhí)行對(duì)隱式地將string 對(duì)象轉(zhuǎn)換成C 風(fēng)格的字符串string類(lèi)型沒(méi)有提供支持例如下面試圖用s1 初始化str 就會(huì)在編譯時(shí)刻失敗char *str = s1; // 編譯時(shí)刻類(lèi)型錯(cuò)誤為實(shí)現(xiàn)這種轉(zhuǎn)換必須顯式地調(diào)用名為c_str()的操作char *str = s1.c_str(); // 幾乎是正確的但是還差一點(diǎn)c_str()返回了一個(gè)指向常量數(shù)組的指針下一節(jié)將解釋常量修飾符constconst char*str 被定義為非常量指針?biāo)赃@個(gè)賦值被標(biāo)記為類(lèi)型違例正確的初始化如下const char *str = s1.c_str(); // okstring st( "The expense of spirit\n" );st 的長(zhǎng)度由size()操作返回不包含終止空字符
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/syhhl007/archive/2009/10/15/4670956.aspx
聯(lián)系客服