在函数中修改指针值

use*_*586 0 c++ pointers

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

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

int main()
{
    char* k= new char[3];
    modify(k);
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 5

将某些内容传递给函数时,可以按值传递它.这意味着该函数在该东西的副本上运行.

这也适用于指针.如果你传递了一个char *,那么就会得到一个指针的副本; 原始指针未被修改.如果要修改原始指针本身,则需要通过char **参数传递其地址.


笔记:

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

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