2011-08-30 32 views
0

我很好奇字符串文字。我已經讀過,在這種情況下,const char * ptr = "Hello World";它們在程序的數據中有靜態存儲持續時間,並且沒有在堆或棧上分配。什麼時候它被用作爭論?作爲參數傳遞時的字符串文字的存儲類型

例如

Function("panda"); 

時定義爲

void Function(const char* str) 
{ 
... 
} 

"panda"是現在也包含在該程序的數據,或者被其在堆棧上分配?

+1

你問題的標題不應該問有關範圍(這是明確的:在函數內),它應該問有關內存分配。 –

回答

1

在你的例子中,「熊貓」(通常是:實現定義的)以靜態持續時間存儲在程序的數據中。 當您撥打Function("panda")時,這與extern char* s = "panda"; Function(s);相同。這在功能聲明中更加清晰。 Function沒有收到一個字符數組,它接收到一個指向常量字符的指針。所以堆棧包含一個指針,而不是一個char數組。

4

在你的程序裏你有字符串常量的地方都是一樣的。 在你的例子中,你只是傳遞一個指向字符串存儲地址的指針。 因此,它與您呈現的一般情況相同。將它用作函數參數與它的存儲位置無關。

相關問題