日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

C語言中,字符數組和字符串指針都可以用來存儲字符串:

char *pstr = "china";

char str[] = "china";

但兩者在內存中的存儲區域是不一樣的:

  • 字符指針的字符串存儲在常量區;
  • 而字符數組則存儲在棧區。

如下圖所示,字符指針pstr指向字符串"china"常量的首地址,字符數組str指向的是在棧區的地址。

C語言字符串數組和字符串指針的區別

 

棧區的字符串(也包括其他數據)有讀取和寫入的權限,而常量區的字符串(也包括其他數據)只有讀取權限,沒有寫入權限。因此,帶來兩方面的區別。

1、指向內容的可變性

字符串一旦被創建就存在于常量池中。

char *pstr = "china";

這是對字符指針進行初始化,此時字符指針指向一個字符串常量的首地址,常量是不能改變的。

char str[] = "china";

這是以字符數組形式創建的字符串,實際上是從字符串常量池中復制了一個副本,所以修改字符數組的內容時,只是修改的自己的副本,并不會影響到常量池中的字符串。

下面代碼直接修改 pstr[0] 的值是錯誤的(能夠正常編譯和鏈接,但在運行時會出現段錯誤(Segment Fault)或者寫入位置錯誤);而修改 str[0] 的值則是可以的。

C語言字符串數組和字符串指針的區別

 

2、值的可變性

pstr 和 str 都是指針,但 pstr 是個變量,它的值是可以改變的,比如可以指向另一個字符串;而 str 指向的是本數組的首元素的地址,不能再變。

C語言字符串數組和字符串指針的區別

 

總結一下,C語言有兩種表示字符串的方法:一種是字符數組,另一種是字符串常量,它們在內存中的存儲位置不同,使得字符數組可以讀取和修改,而字符串常量只能讀取不能修改。

值的可變性:

  • 指針變量的值(pstr)是可以改變的,就是地址的改變;
  • 數組名的值(str)是不能改變的,它只能指向本數組的首元素地址。

指向的內容值:

  • 字符指針數組內的元素的值是常量,在內存的常量區,不能發生改變;
  • 字符數組內的元素是變量,在內存的棧區,是可以改變的。

在編程時,若只需要到對字符串的讀取,那么字符數組和字符串常量都能滿足要求;若有寫入(修改)操作,則只能使用字符數組,不能使用字符串常量。

分享到:
標簽:語言
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定