中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

char *str1 和 char str2[]的詳解

發布時間:2020-07-03 12:34:34 來源:網絡 閱讀:1322 作者:匯天下豪杰 欄目:編程語言

C語言的一個知識點:

  char *str1 = "hello world" 和 char str2[] = "hello world"; 的區別:

1、內存管理:

         char *str1 和 char str2[]的詳解

  內存分為了:只讀代碼段,只讀數據段,BSS,堆,棧五個不同區域。

  如上圖所示: 只讀代碼段一般存放的是編寫好的程序。

  只讀數據段放的是常量(字符串常量,數組名稱,函數名稱),只讀區域不能更改!

  BSS區域存放的是全局變量和static靜態類變量,又分為未初始化,值都為0,和已初始化區域。

  堆中存放的是malloc(),calloc()……申請的空間,不由操作系統回收,必須靠程序員自己通過free()回收空間,不然就是內存泄漏!!!

  棧中存放的是局部變量,形參變量,棧中空間可被任何函數使用,是數據的可靠性很低!


2、str1是指針變量,str1++; right,指針加減整型,結果還是指針。

  對于str2而言,char str2[] = "hello world"; <=> char str2[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\0'}; 

  這是對字符數組初始化,所以str2是數組名稱(指針常量),str2++;false,常量不能賦值!

  "hello world"字符串本身就是以0結尾的字符數組!!!      

3、"hello world"字符串常量在只讀數據段,值本身內容不能被更改!!!

  str1為指針變量,*str1 = 't'; false,更改的是只讀數據段中的區域。

  str2為數組名稱,其空間在棧中申請,*str2 = 't'; true,棧中的數據可以被更改。

4、對char *str1 = "hello world"的深刻理解

  strlen(str1);        11

  strlen(str2);        11

  sizeof(str2);        12   數組名稱,求字節數,是數組所申請的空間的字節數,在上0結束標志。   

  sizeof(str1);        4/8  與平臺有關,32位系統下,指針4字節,64位,指針8字節 

  sizeof(*str1);       1    *str1 就是'h',占用一個字節。

  sizeof("hello world");   12   字符串常量所占空間

  strlen();函數,求得是字符串長度,不算那個0;sizeof();關鍵字,單目運算符,求字節數,算字符串的結束標志0。

5、[]中的值,由初值個數決定。



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

r1 st
AI

进贤县| 常宁市| 嘉定区| 北票市| 手游| 琼结县| 涿州市| 定日县| 体育| 遂溪县| 古交市| 叶城县| 永顺县| 敦化市| 康保县| 社旗县| 和硕县| 桐庐县| 宜宾市| 汽车| 镶黄旗| 柳州市| 西宁市| 漳浦县| 布拖县| 阿勒泰市| 绥化市| 南汇区| 兴城市| 出国| 水城县| 宝丰县| 漳平市| 海晏县| 永修县| 闻喜县| 纳雍县| 诏安县| 洛南县| 宁蒗| 津市市|