我对字符串文字感到好奇。我已经读过,在类似这样的情况下,const char * ptr = "Hello World";
它们在程序数据中有静态存储持续时间,并且没有在堆或堆栈上分配。当它被用作参数时呢?
例如
Function("panda");
定义为
时void Function(const char* str)
{
...
}
是"panda"
现在还包含在程序数据中还是在堆栈中分配?
答案 0 :(得分:4)
程序中的每个地方都有字符串常量,它们是相同的。 在您的示例中,您只是将指针传递给存储字符串的地址。 所以它与你提出的一般情况相同。将它用作函数参数与存储它的位置无关。
答案 1 :(得分:1)
在您的示例中,“panda”(通常是:实现定义)在程序数据中以静态持续时间存储。
当您致电Function("panda")
时,这与extern char* s = "panda"; Function(s);
相同。这在函数声明中更加清晰。 Function
没有收到char数组,它接收到一个指向const chars的指针。所以堆栈包含一个指针,而不是一个char数组。