2011-08-30 84 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

在你的程序里你有字符串常量的地方都是一样的。 在你的例子中,你只是传递一个指向字符串存储地址的指针。 因此,它与您呈现的一般情况相同。将它用作函数参数与它的存储位置无关。

相关问题