91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

民权县| 出国| 门源| 井冈山市| 盘锦市| 拉孜县| 玉屏| 德格县| 邛崃市| 阳谷县| 额尔古纳市| 花莲县| 西和县| 上林县| 西乌珠穆沁旗| 镇江市| 阿瓦提县| 临澧县| 酒泉市| 南漳县| 阿克陶县| 福安市| 汉川市| 南木林县| 漠河县| 宁阳县| 获嘉县| 临洮县| 普兰县| 毕节市| 崇阳县| 肇庆市| 石狮市| 邯郸市| 出国| 恩平市| 镇远县| 德庆县| 南和县| 信宜市| 岢岚县|