5

我尝试制作一个可以更改指定字符数组内容的函数

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

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

但随后 a[1] 的内容停留在 0x0(void)

4

4 回答 4

3

首先,您的函数具有传递给它的指针的副本,因此在调用方看不到任何效果。如果要修改函数参数,请传递引用:

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]);
}
于 2013-08-30T12:41:15.637 回答
2

当您将参数传递给函数时,它通常按值传递,这意味着它的值被复制。如果你想改变它,你必须通过引用传递它。指针也是如此,如果要更改指针,则还需要通过引用传递它:

void change_array(const char*& target) { ... }
于 2013-08-30T12:40:48.463 回答
1

您需要将其作为参考传递:

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

否则,您只需更改 的本地副本target,这不会对函数外部的值产生任何影响。

于 2013-08-30T12:43:02.287 回答
0

试试这个设计:

std::string get_string()
{
    return "hi";
}

int main()
{
    std::string a[2];
    a[1] = get_string();
    std::cout<< a[1];
}

要点:

  • 按值返回
  • 使用 std::string
于 2013-08-30T12:48:12.167 回答