prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 4.8

我有一个函数,它接受一个指针并应该对其进行初始化

	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();

另请参阅问题 4.94.11


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管