任何人都可以指出为什么以下代码需要修改函数中的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)
将某些内容传递给函数时,可以按值传递它.这意味着该函数在该东西的副本上运行.
这也适用于指针.如果你传递了一个char *,那么就会得到一个指针的副本; 原始指针未被修改.如果要修改原始指针本身,则需要通过char **参数传递其地址.
笔记:
1.还值得指出的是,您的代码包含内存泄漏.你动态分配一些内存,然后丢失指向它的指针,这意味着你永远不会delete.
2.在C++中,通常应该避免像这样传递原始指针,因为它会导致痛苦和混乱.你应该研究智能指针.