Почему я не могу взять адрес возвращаемого значения? - PullRequest
3 голосов
/ 23 сентября 2011

Я разделил некоторый код на два файла, он работал раньше.В одном файле у меня есть функция, которая имеет параметр выходного значения, который является указателем на указатель.

Я заполняю этот параметр вызовом метода get и разыменовываю его:

foo(&bar());

, однако я получаю сообщение об ошибке '' & 'требует l-значение'.Я понимаю, что означает эта ошибка, но я думал, что смогу сделать это, потому что это указатель, и поэтому он представляет оригинальную «вещь».

Это как-то связано с фактом, что фактическая память указателейместоположение может измениться, даже если оно будет указывать на правильную вещь?но почему он работал раньше, когда он был в том же файле, а не сейчас?

Заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 23 сентября 2011

Ну, вам нужно lvalue, то есть то, что может быть назначено.Вы не можете присвоить возвращаемое значение функции.

Вам нужно сделать что-то вроде этого:

temp = bar();
foo(&temp);
2 голосов
/ 23 сентября 2011

Используя &, вы не разыменовываете, а ссылаетесь. Для разыменования используйте * вместо: foo(*(bar()));.

А если вы хотите ссылаться на , поместите результат bar() во временную переменную:

x = bar();
foo(&x);
1 голос
/ 25 сентября 2011

Предполагая, что foo принимает указатель на int, попробуйте:

foo((int[]){bar()});
0 голосов
/ 23 сентября 2011

Я полагаю, bar():

type *bar () { return member_pointer; }

, который возвращает указатель member_pointer по значению, следовательно, не является l-vlaue.

Если вы хотите изменить значение member_pointer в foo(), вам нужно:

type **bar () { return &member_pointer; }
...