在看《c程式語言》第五章中,有一節指標陣列,看了還是很迷糊的,於是在電腦上寫了一些**,得到了一些體驗,便記錄下來,倘若有說的不對的地方,請多多指教。
我的c測試**如下:
#include int main(void)
; int i = 0;
while(i<12)
printf("%s\n",++(*month_name));
printf("%c\n",(++(*month_name))[3]);
printf("%c\n",*++month_name[1]);
return 0;
}
下面的語句,想必有點c語言基礎的都能理解,就是分別列印出所有指標指向的字串
while(i<12)
結果就是:
january
february
march
april
mayjune
july
august
septemter
october
november
december
這個倒是挺容易的。
好的,那麼printf("%s\n",++(*month_name));這個語句有事什麼意思呢?
看我慢慢道來:
1、首先month_name這個是陣列名,它指向首元素的位址,&month_name是整個陣列的首位址,兩者的值是一樣的,當然,兩者是有區別的,詳細的區別參見《c語言深度解剖》86頁,
好了,*month_name就是指向"january"這個字串,
若用printf("%s\n",(*month_name));這個語句
則會列印出
january
也可以把*month_name理解成month_name[0];
++(*month_name)這個的意思就是指標加1,指向了字元a以及其餘後面字元所構成的字串anuary,
那麼printf("%s\n",++(*month_name));
就會列印出anuary,
若是printf("%s\n",++(*month_name));
則列印的是january,然後指標再加1
應該理解了吧~哈哈!(廢話,都以為像你一樣啊,趕緊的!~~)
2、對於printf("%c\n",(++(*month_name))[3]);這個語句,大家看一看到有%c,應該可以猜到是輸出乙個字元了,沒錯,那倒底是輸出哪乙個呢?
上面已經說了*month_name以及++(*month_name)的意義,
那麼再首先來看看(++(*month_name))[0]的意思吧。在這個語句中,指標又加了1,又指向了後面的字串"nuary",加後面的[0]引用,則確定到了某乙個字元,即'n'.(也可以理解為month_name[0][0],當然,此時的month_name[0]已經是"nuary"了!)。
所以printf("%c\n",(++(*month_name))[3]);就是輸出字元'r'了。
3、對於printf("%c\n",*++month_name[1]);咋一看我還真不理解,不過只要功夫深,哦,是「只要鋤頭揮的好,哪有牆腳挖不倒?」 誒喲,扯遠了!~趕緊回來!首先的優先順序(結合律)比++來的高,所以*++month_name[1]就等同於*++(month_name[1]),又因為++的優先順序比*(指標引用)來的高,所以又等同於*(++(month_name[1])),問題似乎明朗起來了,
month_name[1]就是指向"february"字串,++month_name[1]就是指向"ebruary"字串,在*(++(month_name[1]))當中,指標是先加的1,然後在取值(引用),所以輸出的就是字元'e'了,(也可以理解為month_name[1][0],當然,此時的month_name[1]已經是"ebruary"了!不知這樣理解妥不妥當~但是心裡一定要理解啊!)
指標陣列以及指向字串的理解
在看 c程式語言 第五章中,有一節指標陣列,看了還是很迷糊的,於是在電腦上寫了一些 得到了一些體驗,便記錄下來,倘若有說的不對的地方,請多多指教。我的c測試 如下 include int main void int i 0 while i 12 printf s n month name print...
指標指向字串和陣列儲存字串區別
include void main 定義了乙個指向字串的指標,str是在棧上分配的變數,儲存的位址對應的是在常量區中分配的空間。aafg 是儲存在常量區裡面,是不能改變的。char str 其實存在一種 const char 型別的隱式轉換,而strcpy要做的改變常量,所以程式編譯的時候沒錯,執行...
C語言 字串指標(指向字串的指標)
字串一旦被建立就存在於常量池中。以字元陣列形式建立的字串,實際上是從字串常量池中複製了乙個副本,所以修改字元陣列的內容時,只是修改的自己的副本,並不會影響到常量池中的字串。而對字串指標strp操作時會影響到常量池中的字串 char strc string char strp string print...