Я слышал, что ++a
возвращает l-значение в c, где a++
возвращает r-значение в c. Так как ++a
возвращает l-значение, то почему &(++a) выдает ошибку компиляции?
Вот ссылка: Почему ++x является lvalue, а x++ - rvalue?< /а>
#include<stdio.h>
int main()
{
int a=1,*p;
p=&(++a);
printf("%d",p);
}
Сообщение об ошибке:
guess.c: In function ‘main’:
guess.c:6:4: error: lvalue required as unary ‘&’ operand
p=&(++a);
++a
не возвращает lvalue в C, поэтому вы исходите из ложной предпосылки, что приводит к ложному заключению. Обратите внимание, что ваш связанный вопрос явно помечен c++ и c++11 — то, что применимо в C++, особенно в C++11 или более поздних версиях, очень часто не применимо к C, даже к C11 или C17 (C18 ). - person Jonathan Leffler   schedule 28.06.2019&
, на самом деле не является lvalue. - person Antti Haapala   schedule 28.06.2019