3

我已经将一些代码分成两个文件,它以前可以工作。在一个文件中,我有一个函数,它有一个输出值参数,它是一个指向指针的指针。

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

foo(&bar());

但是我收到一条错误消息,说“&”需要左值”。我理解这个错误的含义,但我认为我能够做到这一点,因为它是一个指针,因此确实代表了原始的“事物”。

这是否与实际指针内存位置可能会改变这一事实有关,即使它会指向正确的东西?但是为什么它以前在同一个文件中而不是现在可以工作?

提前致谢!

4

4 回答 4

5

好吧,你需要一个左值,即可以分配的东西。您不能分配给函数的返回值。

你需要做这样的事情:

temp = bar();
foo(&temp);
于 2011-09-23T10:25:46.427 回答
2

使用 &,您不是取消引用,而是引用。要取消引用,请使用 * 代替:foo(*(bar()));.

如果您确实想引用它,请将结果放入bar()临时变量中:

x = bar();
foo(&x);
于 2011-09-23T10:27:19.000 回答
1

假设foo需要一个指向 int 的指针,请尝试:

foo((int[]){bar()});
于 2011-09-25T03:34:12.257 回答
0

我猜bar()是:

type *bar () { return member_pointer; }

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

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

type **bar () { return &member_pointer; }
于 2011-09-23T10:27:11.857 回答