作为数组传递的字符串的内存分配

时间:2018-04-06 08:42:27

标签: c++

我有一个非常基本的问题。在下面的代码中,我们将字符串作为参数传递给someFunc函数,其中char数组作为参数。如何为[]分配内存,以及内存将在何处分配?如何在不同大小的字符串的情况下决定分配多少内存?

int someFunc(char a[])
{ 
   //do something
}

int main( )
{
   someFunc("Frankenstein is dead");

   someFunc("Hello there");
   return 0;
}

1 个答案:

答案 0 :(得分:10)

在C ++中将参数声明为数组时,它实际上被声明为指针

也就是说,你的功能真的是

someFunc(char* a) { ... }

这意味着,传递的是指向文字字符串的第一个元素的指针。

另请注意,在C ++中,文字字符串是常量字符的数组。所以它衰减到const char*类型。这意味着你的论点也必须属于那种类型。

如何分配常量字符串文字数组实际上是无关紧要的和实现细节,但通常编译器将字符串与生成的代码一起保存在可执行程序文件中。这使得它们可以通过操作系统程序加载器与代码一起加载到内存中,并且不会对字符串本身进行“动态”分配。