1. 程式人生 > >c語言中輸出字元指標相關問題

c語言中輸出字元指標相關問題

一、例如定義一個 char * p = "hello";的字元指標。

首先搞清楚在c語言中沒有字串的型別,所以對字串操作,有兩種形式:可以用字元指標(為什麼不叫字串指標,我個人覺得,字元指標針對的是單個字元的操作,即指標操作,所以就叫它字元指標吧。。。),或者字串陣列(這裡不在討論字串相關問題,前面部落格有討論過)這裡的指標變數p,系統會為其重新分配內存。

"talk is cheap , please show me your code",說多無用,放碼過來

有人會問,p不是指標變數嗎?但是為什麼printf("%s",p)他為什麼列印的不是地址?

答:是的p肯定是指標變數,它也一定是地址,但是別忘了在C語言中,系統都會預設在字串末給我們加上\0用於結束字串,所以用printf()輸出時候,只要你列印格式是%s,系統知道我們要輸出字串,而且系統也可以確定字串的長度,所以當你用%s列印字元指標p的時候就會輸出字串

,如果你是以地址列印格式輸出的話,系統就會給我們打印出地址, 如果你是解指標(*p),那麼系統就取p指標指向的內容,此時看你自己以什麼格式輸出,就用什麼格式列印。

注意:在字元指標中p 、*p 和&p的區別:p是指標變數指向字串首元素(前提對p指標沒有進行指標操作),p中存放首元素的地址(一旦被初始化就,系統就為我們分配好了地址,而且地址也不能改變,因為字元指標是一個只讀變數,你不能企圖對一個初始化好的指標進行內部修改),而*p是對指標變數p進行解引用操作,也就是指標所指向的內容,而&p是對指標變數取地址,所以也就肯定不會和p的值相等,因為字元指標系統會為其分配記憶體,p的值是字串首元素的地址。