c ++将char数组传递给函数并进行更改

时间:2013-08-30 12:38:30

标签: c++

我尝试创建一个可以更改指定char数组内容的函数

void change_array(char *target)
{
    target="hi";
}

int main()
{
    char *a[2];
    change_array(a[1]);
    cout<<*(a[1]);
}

但是[1]的内容保持在0x0(无效)

4 个答案:

答案 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];
}

突出点:

  • 按值返回
  • 使用std :: string