问我有一个函数,它接受一个指针并应该对其进行初始化
void f(int *ip) { static int dummy = 5; ip = &dummy; }但是当我像这样调用它时
int *ip; f(ip);调用者中的指针保持不变。
答您确定函数初始化了您认为它应该初始化的内容吗?请记住,C 语言中的参数是按值传递的。在上面的代码中,被调用的函数只改变了传递的指针副本。要使其按您预期的方式工作,一种修复方法是传递指针的地址(函数最终接受一个指向指针的指针;在这种情况下,我们实际上是在模拟按引用传递)
void f(ipp) int **ipp; { static int dummy = 5; *ipp = &dummy; } ... int *ip; f(&ip);
另一种解决方案是让函数返回该指针
int *f() { static int dummy = 5; return &dummy; } ... int *ip = f();