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