我已将一些代码拆分为两个文件,之前它正在运行。在一个文件中,我有一个函数,它有一个out值参数,它是一个指向指针的指针。
我正在通过调用getter并取消引用它来填充此参数:
foo(&bar());
然而我收到错误的说''&'需要一个l值'。我理解这个错误意味着什么,但我想我能做到这一点,因为它是一个指针,所以它代表了原始的“东西”。
是否与实际指针内存位置可能发生变化的事实有关,即使它指向正确的事情?但是为什么它在同一个文件中而不是现在呢?
提前致谢!
答案 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; }