我尝试创建一个可以更改指定char数组内容的函数
void change_array(char *target)
{
target="hi";
}
int main()
{
char *a[2];
change_array(a[1]);
cout<<*(a[1]);
}
但是[1]的内容保持在0x0(无效)
答案 0 :(得分:3)
首先,你的函数有一个传递给它的指针的副本,所以在调用方没有看到效果。如果要修改函数参数,请传递引用:
void change_array(char*& target) { ... }
// ^
其次,你不能/不应该将非const指针绑定到字符串文字。请改用const char*
。
void change_array(const char*& target) { ... }
// ^^^^^ ^
int main()
{
const char* a[2];
change_array(a[1]);
cout<<*(a[1]);
}
答案 1 :(得分:2)
当您将参数传递给函数时,它通常按值传递,这意味着它的值被复制。如果你想改变它,你必须通过引用传递它。对于指针也是如此,如果你想改变指针,那么你也需要通过引用传递它:
void change_array(const char*& target) { ... }
答案 2 :(得分:1)
您需要将其作为参考传递:
void change_array(char*&target)
{
target="hi";
}
否则,您只需更改target
的本地副本,这不会对函数外部的值产生任何影响。
答案 3 :(得分:0)
请尝试使用此设计:
std::string get_string()
{
return "hi";
}
int main()
{
std::string a[2];
a[1] = get_string();
std::cout<< a[1];
}
突出点: