1. 程式人生 > >C語言指標 易錯知識

C語言指標 易錯知識

(1)

 char *sptr="abc",*ptr;
 *ptr=sptr;

編譯時錯誤。
原因:
*ptr是一個字元,sptr是一個指向字元的指標,程式碼試圖將一個字元指標賦值給一個字元,很顯然會產生型別衝突。
(2)

char *sptr="abc",*ptr;
ptr=sptr;

正確。
(3)

char *sptr="abc",*ptr;
*ptr=*sptr;

可能產生執行時錯誤。
原因:
程式沒有為ptr分配儲存空間,當解引用ptr時,無法確定它的指向。
(4)

int *iptr=(int *)10;
*iptr=11;

可能產生執行時錯誤。
原因:
將一個固定的地址賦值給一個整型指標是很危險的。當解引用iptr時,我們會把11寫到地址為10的iptr中,這種操作很可能是不合法的。
(5)

int *iptr=10;
*iptr=11;

可能產生執行時錯誤或警告。
原因:
此程式碼嘗試將一個整數賦值給一個整型指標,很多時候這種操作並不合法或會造成型別衝突。
(6)

int *iptr=(int *)10;
iptr=NULL;

正確。
原因:
雖然程式一開始做了一個將固定地址賦值給整型指標iptr的危險操作,但它立刻將此指標設為NULL,這是正確的操作。