函式內返回字元陣列和字元指標的問題

2021-07-05 21:15:06 字數 823 閱讀 9984

// 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...