作为参数传递时的字符串文字的存储类型

时间:2011-08-30 23:37:02

标签: c++ string literals arguments

我对字符串文字感到好奇。我已经读过,在类似这样的情况下,const char * ptr = "Hello World";它们在程序数据中有静态存储持续时间,并且没有在堆或堆栈上分配。当它被用作参数时呢?

例如

Function("panda");

定义为

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

"panda"现在还包含在程序数据中还是在堆栈中分配?

2 个答案:

答案 0 :(得分:4)

程序中的每个地方都有字符串常量,它们是相同的。 在您的示例中,您只是将指针传递给存储字符串的地址。 所以它与你提出的一般情况相同。将它用作函数参数与存储它的位置无关。

答案 1 :(得分:1)

在您的示例中,“panda”(通常是:实现定义)在程序数据中以静态持续时间存储。 当您致电Function("panda")时,这与extern char* s = "panda"; Function(s);相同。这在函数声明中更加清晰。 Function没有收到char数组,它接收到一个指向const chars的指针。所以堆栈包含一个指针,而不是一个char数组。