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