初始化'char *&'类型的非const引用来自临时的“char *”类型

时间:2013-08-22 07:09:40

标签: c++ reference

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


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

上面的代码编译失败:

  

初始化'char *&'类型的非const引用来自临时的'char *'

为什么char c[]无法被参数p引用?

3 个答案:

答案 0 :(得分:7)

因为c的类型是char[4],即 aray of four char s。您的引用需要char*,即a 指向char

的指针

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

为什么您的功能首先参考?如果char*完全没问题。

答案 1 :(得分:0)

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

来修改代码
char c[] = "123";
char* tmp = c;
test3(tmp);

当你试图复制比长度更长的字符串时,你可能会破坏变量。

答案 2 :(得分:0)

您可以通过添加修饰符修改代码," const", 承诺你不会改变c:

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


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