任何人都可以指出为什么以下代码在修改函数中需要char **指针。如果我只是传递char *并在函数调用返回后修改该值k具有垃圾值。有人可以证明这一点吗?
char* call()
{
return "fg";
}
void modify(char** i)
{
*i = call();
}
int main()
{
char* k= new char[3];
modify(k);
}
答案 0 :(得分:5)
当您将某些内容传递给某个函数时,会将其按值传递给它。这意味着该功能在该事物的副本上运行。
这也适用于指针。如果传递char *
,则会生成该指针的副本;原始指针未被修改。如果要修改原始指针本身,则需要通过char **
参数传递其地址。
备注:强>
1。还值得指出的是,您的代码包含内存泄漏。你动态分配一些内存,然后丢失指向它的指针,这意味着你永远不能delete
它。
2。在C ++中,通常应该避免像这样传递原始指针,因为它会导致痛苦和混乱。你应该研究智能指针。