指標陣列以及指向字串的理解

2022-02-06 04:48:03 字數 1923 閱讀 7583

在看《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...