// 1
#include
char *arrstr()
char arr="hello world !";
return arr;
int main()
char *str=arrstr();
printf("%s",str);
// 2
#include
char *arrstr()
char *p="hello world !";
return p;
int main()
char *str=arrstr();
printf("%s",str);
結果: 1 輸出為亂碼 2 輸出 hello world!
1、"hello world!"是乙個字串常量,存放在靜態資料區,沒錯,
但是把乙個字串常量賦值給了乙個區域性變數(char 型陣列),該區域性變數存放在棧中,
這樣就有兩塊內容一樣的記憶體,
也就是說「char p=
"hello world!"
;」這條語句讓「hello world!」這個字串在記憶體中有兩份拷貝,乙份在動態分配的棧中,另乙份在靜態儲存區。
當arrstr函式退出
時,棧要清空,區域性變數的記憶體也被清空了
,所以這時的函式返回的是乙個已被釋
放的記憶體地
址,所以列印出來的是亂碼。
2、把字串所在靜態儲存區的首位址賦給指標p , 當函式退出時,字串常量所佔記憶體不會被收回,所以能夠順利訪問訪問
字元陣列和字元指標
字元陣列是一段記憶體空間 字元指標是乙個位址,指向一串字元。char str abcd char str abcd 字元陣列是一段記憶體空間 字元指標是乙個位址,指向一串字元 char str abcd char str abcd 上面這兩跳複製語句很相似,其實根本就不是一碼事。對於兩個 abcd ...
字元指標和字元陣列
1.字元指標可以指向乙個字串。我們可以用字串常量對字元指標進行初始化。例如,有說明語句 char str this is a string.是對字元指標進行初始化。此時,字元指標指向的是乙個字串常量的首位址,即指向字串的首位址。這裡要注意字元指標與字元陣列之間的區別。例如,有說明語句 char st...
字元陣列和字元指標
1.在函式getmem棧內定義個陣列,將位址return給main函式的指標str eg char p hello world char getmemory void char p hello world return p void test void char str null str getme...