堆、棧、全局區靜態區、文字常量區、程序代碼區

一、內存結構圖:



二、代碼示範區:


三:案例分析:

char* 和 char[] 有什麼區別?


char ch[]="abc";
表示ch 是一個足以存放字符串初值和空字符'/0'的一維數組,可以更改數組中的字符,但是char本身是不可改變的常量。
char *pch = "abc";
那麼pch 是一個指針,其初值指向一個字符串常量,之後它可以指向其他位置,但如果試圖修改字符串的內容,結果將不確定。
______ ______ ______
ch: |abc\0 | pch: | ◎-----> |abc\0 |
______ ______ ______

總結如下:
1. char[] p表示p是一個數組指針,相當於const pointer,不允許對該指針進行修改。但該指針所指向的數組內容,是分配在棧上面的,是可以修改的。
2.
char * pp表示pp是一個可變指針,允許對其進行修改,即可以指向其他地方,如pp = p也是可以的。對於*pp =
"abc";這樣的情況,由於編譯器優化,一般都會將abc存放在常量區域內,然後pp指針是局部變量,存放在棧中,因此,在函數返回中,允許返回該地址
(實際上指向一個常量地址,字符串常量區);而,char[] p是局部變量,當函數結束,存在棧中的數組內容均被銷燬,因此返回p地址是不允許的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章