在为个人项目编程时,我发现当我向一个函数传递指针时,其值无法更改。例如:
...
GString *buf = NULL;
buf = g_string_sized_new(64);
somefunc(buf, filename);
...
和
void somefunc(GString *buf, gchar *filename)
{
buf = otherfunc(filename); //otherfunc() returns a GString *
}
看完调试器后我观察到当缓冲区内存分配运行时,则buf = 0x80b720和otherfunc()返回0x80b750。虽然缓冲区的值没有变化。所以我想问一下是否有人知道为什么会发生这种情况,以及这是否是malloc()的一般特征。换句话说,如果将malloc()调用返回的指针传递给函数,那么您是否可以在函数体内部或外部更改此值?
答案 0 :(得分:8)
这与malloc
无关。
当您将指针传递给函数时,该函数会接收原始指针的副本。它可以修改自己的指针副本,但不能修改原始指针。
如果你想要它修改原始指针,你需要传递原始指针的地址,它将作为指针指针接收。
void somefunc(GString **buf, gchar *filename) {
*buf = otherfunc(filename);
}