2011-09-23 52 views
3

我已经把一些代码分成了两个文件,它之前工作。在一个文件中,我有一个函数,它有一个out值参数,它是一个指向指针的指针。为什么我无法获取返回值的地址?

我用填充调用此参数的getter和取消引用它:

foo(&bar()); 

但是我得到一个错误说“” &“需要一个左值”。我明白这个错误意味着什么,但是我认为我能够做到这一点,因为它是一个指针,所以它代表了原来的'事情'。

有什么事情做的事实,实际指向的内存位置可能会改变,即使它会指向正确的事?但为什么它在同一个文件中,而不是现在之前工作?

在此先感谢!

回答

5

那么,你需要一个左值,即一些可以分配给。您不能分配给函数的返回值。

你需要做这样的事情:

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

当然,如果'foo'返回'美孚*'那么你可以:-) – spraff

+0

@spraff嗯,引用。事情告诉我这可能是C代码。 –

+0

“*** ***如果'foo'回来......” – spraff

0

我猜bar()是:

type *bar() { return member_pointer; } 

它通过值返回指针member_pointer,因此不是L-vlaue。

如果你想修改foo()member_pointer,您需要:

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

所以你必须创建指针指针的getters?我以为你可以使用getter来获取指针,然后用&引用它。为什么你不能这样做?要创造这么多的获得者似乎不够高雅。 – SirYakalot

+0

@SirYakalot:只有当你想改变拥有的类中的指针值。 – Skizz

2

使用&,你是不是取消引用,但引用。要删除,请使用*代替:foo(*(bar()));

如果你想参考它,就把bar()结果在一个临时变量:

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

假设foo需要一个指针到整型,尝试:

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

+1非常好。似乎与一个结构一起工作。这是一个gcc扩展? (目前无法测试。) –

+0

这是C99(复合文字)。 –

相关问题