修改函数中的指针值

Modifying pointer value in function

本文关键字:指针 函数 修改      更新时间:2023-10-16

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

char* call()
{
    return "fg";
}
void modify(char** i)
{
    *i = call();
}
int main()
{
    char* k= new char[3];
    modify(k);
}

当你将某些东西传递到函数中时,你通过值传递它。 这意味着该函数在该事物的副本上运行。

这也适用于指针。 如果您传递一个char *,则会创建该指针的副本;不会修改原始指针。 如果要修改原始指针本身,则需要通过 char ** 参数传递其地址。


笔记:

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

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