C語言中字符串和指針的用法分析


 

  以前學C++的時候,對字符串和指針學的很模糊,現在有時間重新看C,開始還是很模糊,慢慢研究,漸漸有了頭緒,決定寫下來加深自己的印象。

首先,讓我們來看 char shuzu[7];聲明的字符串,直接上代碼

#include<stdio.h>

int main()

char shuzu[7]="123456";

printf("%x\n",&shuzu);

printf("%x\n",shuzu);
printf("%x\n",&shuzu[0]);

return 0;

}

輸出如圖:

可以看到,輸出的三個地址都相同。char shuzu[7]="123456"語句執行的時候,系統就分配了一段長7字節的連續內存,並把這段內存起名為shuzu,里面的值為"123456"

&shuzu,就是shuzu這個變量的內存地址,由於這段內存叫shuzu,所以shuzu的地址也就是這段內存的首地址,也就是'1'字符所在字節的地址;

shuzu,對於數組變量,可以使用變量名來索引變量中的內容,其實這里的shuzu可以理解成數組變量退化的指針,並且指向數組的開頭,既然把它理解成指針,那么它的值肯定是地址了,所以他的值和上面的一樣。(摘自互聯網)

&shuzu[0],比較容易理解,第一個字符串的地址,因此和上面兩個是一樣的。

 

下面再來看以方法char *shuzu="123456";聲明的字符串

#include<stdio.h>

int main()

char *shuzu="123456";

printf("%x\n",&shuzu);

printf("%x\n",shuzu);
printf("%x\n",&shuzu[0]);

return 0;

}

輸出如圖

可以看出 ,第一個和后兩個輸出有點區別,我們一個一個分析

首先,char *shuzu 是聲明一個char類型的指針變量,和數組名稱不同,它在內存中有自己的地址

&shuzu :就是取存儲指針變量的值,也就是shuzu這個變量在內存中存儲的地址

shuzu:存儲在指針變量中的值,指向"123456"這個數組的首地址("123456"返回值是一個char類型的指針)。

&shuzu[0]:數組中第一個字符的地址,和數組相同。

 

這里要弄清數組名稱和真正指針的區別。

最后來看最讓我頭疼的 指針數組 

用該表達式聲明一個指針數組char *shuzu[]={"1","2"};

代碼如下

#include<stdio.h>

int main()
{



char *shuzu[]={"1","2"};
printf("%x\n",&shuzu);
printf("%x\n",shuzu);
printf("%x\n",&shuzu[0]);
return 0;

}

輸出如圖

其實也很好理解,我們把指針數組看成是普通的數組,數組名稱是shuzu,第一個值是shuzu[0],於是,這個數組和char shuzu[7]="123456"聲明的數組大概相似了。只是一個數組里存儲的char類型的指針,而另一個存儲的是char類型的值,這樣shuzu、&shuzu、和&shuzu[0]三個輸出相同,我們也就明白了。

另外,*shuzu 的值是第一個字符串的地址。和shuzu不同。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM