在函数中修改指针值

时间:2012-04-09 17:35:55

标签: c++ pointers

任何人都可以指出为什么以下代码在修改函数中需要char **指针。如果我只是传递char *并在函数调用返回后修改该值k具有垃圾值。有人可以证明这一点吗?

char* call()
{
    return "fg";
}
void modify(char** i)
{
    *i = call();
}

int main()
{
    char* k= new char[3];
    modify(k);
}

1 个答案:

答案 0 :(得分:5)

当您将某些内容传递给某个函数时,会将其按值传递给它。这意味着该功能在该事物的副本上运行。

这也适用于指针。如果传递char *,则会生成该指针的副本;原始指针未被修改。如果要修改原始指针本身,则需要通过char **参数传递其地址。


备注:

1。还值得指出的是,您的代码包含内存泄漏。你动态分配一些内存,然后丢失指向它的指针,这意味着你永远不能delete它。

2。在C ++中,通常应该避免像这样传递原始指针,因为它会导致痛苦和混乱。你应该研究智能指针。