void test3(char * &p){
strcpy( p, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
}
char c[] = "123";
test3(c);
上面的代码编译失败:
从“char*”类型的临时变量初始化“char*&”类型的非常量引用
为什么char c[]
不能被参数引用p
?
因为 的类型c
是char[4]
,即四个char
s 的数组。您的参考需要一个char*
,即指向char
.
数组不是指针。在大多数情况下,它们在使用时衰减为指向第一个元素的指针,但衰减产生的指针是临时的。因此,它不能绑定到非常量引用。
为什么你的函数首先要引用?服用会很好char*
。
您可以通过将中间变量修改为:
char c[] = "123";
char* tmp = c;
test3(tmp);
当您尝试复制比长度更长的字符串时,您可能会损坏变量。
您可以通过添加修饰符“const”来修改您的代码,保证您不会更改 c 的地址:
void test3(char * const &p){
strcpy( p, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
}
char c[] = "123";
test3(c);