从类型为"char*"的临时引用初始化类型为"char*&"的非常量引用

initialization of non-const reference of type 'char*&' from a temporary of type 'char*'

本文关键字:引用 char 类型 非常 常量 初始化      更新时间:2023-10-16
void test3(char * &p){
    strcpy( p, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
}

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

上面的代码编译失败:

从类型为"char

*"的临时引用初始化类型为"char*&"的非常量引用

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

因为c的类型是char[4],即char秒的轨迹。你的引用需要一个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);
相关文章: