例1
例2
我为malloc写了一个小小的封装函数,它为什么不行?
上述两个例子的问题是一样的。
在C语言中参数是通过值传递的,上述代码中被调函数仅仅修改了传入的指针副本。
为了达到期望的效果,我们需要传入指针的地址(函数变成接受指向指针的指针)
void f(int **ipp)
{
static int dummy = 5;
*ipp=&dummy
}
...
int *ip;
f(&ip);
这里实际上在模拟通过引用传递参数(C语言中没有引用)。另一种方是让函数返回指针:
int *f()
{
static int dummy = 5;
return &dummy;
}
..
int *ip=f();