我有一个非常基本的问题。在下面的代码中,我们将字符串作为参数传递给someFunc函数,其中char数组作为参数。如何为[]分配内存,以及内存将在何处分配?如何在不同大小的字符串的情况下决定分配多少内存?
int someFunc(char a[])
{
//do something
}
int main( )
{
someFunc("Frankenstein is dead");
someFunc("Hello there");
return 0;
}
答案 0 :(得分:10)
在C ++中将参数声明为数组时,它实际上被声明为指针。
也就是说,你的功能真的是
someFunc(char* a) { ... }
这意味着,传递的是指向文字字符串的第一个元素的指针。
另请注意,在C ++中,文字字符串是常量字符的数组。所以它衰减到const char*
类型。这意味着你的论点也必须属于那种类型。
如何分配常量字符串文字数组实际上是无关紧要的和实现细节,但通常编译器将字符串与生成的代码一起保存在可执行程序文件中。这使得它们可以通过操作系统程序加载器与代码一起加载到内存中,并且不会对字符串本身进行“动态”分配。