我很好奇字符串文字。我已经读过,在这种情况下,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数组。
在你的程序里你有字符串常量的地方都是一样的。 在你的例子中,你只是传递一个指向字符串存储地址的指针。 因此,它与您呈现的一般情况相同。将它用作函数参数与它的存储位置无关。
你问题的标题不应该问有关范围(这是明确的:在函数内),它应该问有关内存分配。 –