Почему я не могу взять адрес возвращаемого значения?
Я разделил некоторый код на два файла, он работал раньше. В одном файле у меня есть функция, которая имеет параметр выходного значения, который является указателем на указатель.
Я заполняю этот параметр вызовом геттера и разыменую его:
foo(&bar());
однако я получаю сообщение об ошибке "&" требует l-значение ". Я понимаю, что означает эта ошибка, но я подумал, что смогу сделать это, потому что это указатель, и поэтому он представляет оригинальную "вещь".
Это как-то связано с тем, что фактическое расположение памяти указателей может измениться, даже если оно будет указывать на правильную вещь? но почему он работал раньше, когда он был в том же файле, а не сейчас?
Заранее спасибо!
4 ответа
Ну, вам нужно lvalue, то есть то, что может быть назначено. Вы не можете присвоить возвращаемое значение функции.
Вам нужно сделать что-то вроде этого:
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; }