3

一部のコードを 2 つのファイルに分割しましたが、以前は機能していました。あるファイルには、ポインターへのポインターである出力値パラメーターを持つ関数があります。

このパラメーターにゲッターへの呼び出しを入力し、逆参照しています。

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

foointへのポインタを取ると仮定して、試してください:

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 に答える