簡體   English   中英

C:函數返回指針

[英]C: function returning pointer

我在概念上有困難

考慮以下代碼:

char *myfunc()
{
char *temp = "string";
return temp;
}

int main()
{
char* ptr = myfunc();
} 

我不明白為什么在函數調用后ptr指向“字符串”。 myfunc()在堆棧中創建一個值為“ string”的地址,並為另一個地址為“ string”的地址。 函數結束時,將釋放其在堆棧中的內存,因此它應返回一個指針,該指針指向不再包含“字符串”的地址。

temp變量的位置在堆棧上,但是字符串文字( temp指向的位置)的位置未存儲在堆棧上。 所有字符串文字都有程序整個運行時的生命周期,因此可以自由傳遞指向字符串文字的指針。

但是,在指向字符串文字時,您應該真正養成使用const char *的習慣,因為無法修改字符串文字。


根據ISO / IEC 9899:2011第6.4.5 / 6條:

然后,將多字節字符序列用於初始化靜態存儲持續時間數組

(強調我的)

當規范說“靜態存儲持續時間”時,表示生存期與程序的執行時間相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM