我很好奇字符串文字。我已經讀過,在這種情況下,const char * ptr = "Hello World";
它們在程序的數據中有靜態存儲持續時間,並且沒有在堆或棧上分配。什麼時候它被用作爭論?作爲參數傳遞時的字符串文字的存儲類型
例如
Function("panda");
時定義爲
void Function(const char* str)
{
...
}
"panda"
是現在也包含在該程序的數據,或者被其在堆棧上分配?
我很好奇字符串文字。我已經讀過,在這種情況下,const char * ptr = "Hello World";
它們在程序的數據中有靜態存儲持續時間,並且沒有在堆或棧上分配。什麼時候它被用作爭論?作爲參數傳遞時的字符串文字的存儲類型
例如
Function("panda");
時定義爲
void Function(const char* str)
{
...
}
"panda"
是現在也包含在該程序的數據,或者被其在堆棧上分配?
在你的例子中,「熊貓」(通常是:實現定義的)以靜態持續時間存儲在程序的數據中。 當您撥打Function("panda")
時,這與extern char* s = "panda"; Function(s);
相同。這在功能聲明中更加清晰。 Function
沒有收到一個字符數組,它接收到一個指向常量字符的指針。所以堆棧包含一個指針,而不是一個char數組。
在你的程序裏你有字符串常量的地方都是一樣的。 在你的例子中,你只是傳遞一個指向字符串存儲地址的指針。 因此,它與您呈現的一般情況相同。將它用作函數參數與它的存儲位置無關。
你問題的標題不應該問有關範圍(這是明確的:在函數內),它應該問有關內存分配。 –