void test3(char * &p){
strcpy( p, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
}
char c[] = "123";
test3(c);
上面的代码编译失败:
初始化'char *&'类型的非const引用来自临时的'char *'
为什么char c[]
无法被参数p
引用?
答案 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);