0

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

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

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

1 回答 1

5

当您将某些内容传递给函数时,您通过value传递它。这意味着该函数对该事物的副本进行操作。

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


笔记:

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

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

于 2012-04-09T17:37:14.113 回答