我已经将一些代码分成两个文件,它以前可以工作。在一个文件中,我有一个函数,它有一个输出值参数,它是一个指向指针的指针。
我通过调用 getter 来填充此参数并取消引用它:
foo(&bar());
但是我收到一条错误消息,说“&”需要左值”。我理解这个错误的含义,但我认为我能够做到这一点,因为它是一个指针,因此确实代表了原始的“事物”。
这是否与实际指针内存位置可能会改变这一事实有关,即使它会指向正确的东西?但是为什么它以前在同一个文件中而不是现在可以工作?
提前致谢!
好吧,你需要一个左值,即可以分配的东西。您不能分配给函数的返回值。
你需要做这样的事情:
temp = bar();
foo(&temp);
使用 &,您不是取消引用,而是引用。要取消引用,请使用 * 代替:foo(*(bar()));
.
如果您确实想引用它,请将结果放入bar()
临时变量中:
x = bar();
foo(&x);
假设foo
需要一个指向 int 的指针,请尝试:
foo((int[]){bar()});
我猜bar()
是:
type *bar () { return member_pointer; }
它按值返回指针member_pointer
,因此不是 l-vlaue。
如果要修改 中的值member_pointer
,则foo()
需要:
type **bar () { return &member_pointer; }