4
void test3(char * &p){
    strcpy( p, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
}


char c[] = "123";
test3(c);

上面的代码编译失败:

从“char*”类型的临时变量初始化“char*&”类型的非常量引用

为什么char c[]不能被参数引用p

4

3 回答 3

8

因为 的类型cchar[4],即四个chars 的数组。您的参考需要一个char*,即指向char.

数组不是指针。在大多数情况下,它们在使用时衰减为指向第一个元素的指针,但衰减产生的指针是临时的。因此,它不能绑定到非常量引用。

为什么你的函数首先要引用?服用会很好char*

于 2013-08-22T07:12:40.663 回答
0

您可以通过将中间变量修改为:

char c[] = "123";
char* tmp = c;
test3(tmp);

当您尝试复制比长度更长的字符串时,您可能会损坏变量。

于 2013-08-22T08:12:46.833 回答
0

您可以通过添加修饰符“const”来修改您的代码,保证您不会更改 c 的地址:

void test3(char * const &p){
    strcpy( p, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
}


char c[] = "123";
test3(c);
于 2018-03-12T13:28:52.617 回答