为什么我不能获取返回值的地址?

时间:2011-09-23 10:24:07

标签: c pointers lvalue

我已将一些代码拆分为两个文件,之前它正在运行。在一个文件中,我有一个函数,它有一个out值参数,它是一个指向指针的指针。

我正在通过调用getter并取消引用它来填充此参数:

foo(&bar());

然而我收到错误的说''&'需要一个l值'。我理解这个错误意味着什么,但我想我能做到这一点,因为它是一个指针,所以它代表了原始的“东西”。

是否与实际指针内存位置可能发生变化的事实有关,即使它指向正确的事情?但是为什么它在同一个文件中而不是现在呢?

提前致谢!

4 个答案:

答案 0 :(得分:5)

嗯,你需要一个左值,即可以分配的东西。您无法分配函数的返回值。

你需要做这样的事情:

temp = bar();
foo(&temp);

答案 1 :(得分:2)

使用&,您不是解除引用,而是引用。要退款,请使用*代替:foo(*(bar()));

如果您确实希望引用,请将bar()的结果放在临时变量中:

x = bar();
foo(&x);

答案 2 :(得分:1)

假设foo采用指向int的指针,请尝试:

foo((int[]){bar()});

答案 3 :(得分:0)

我猜bar()是:

type *bar () { return member_pointer; }

按值返回指针member_pointer,因此不是l-vlaue。

如果您想修改member_pointer中的值foo(),则需要:

type **bar () { return &member_pointer; }