Приращение в обе стороны в C

Что означает следующая строка в C. Каков порядок ее выполнения?

float *x,*y;
*x++=*y++

Кто-нибудь может объяснить, как это оценивалось?

-6

Решение

Для оригинального кода:

x++ = y++

Эта строка никогда не будет оценена, потому что она не является допустимой C и не будет скомпилирована. Результат x++ не является lvalue и не допускается в левой части задания.

Для обновленного кода:

float x,y;
*x++ = *y++

Это не законно, потому что * не может быть применен к float,

Я добавлю этот код:

float *x, *y;
*x++ = *y++;

Этот код говорит:

  • Пусть временный скажем float *xtравно x,
  • Пусть временный скажем float *ytравно y,
  • Добавить один к x,
  • Добавить один к y,
  • приписывать *xt = *yt,

Фактические операции могут быть выполнены в различных заказах, обеспечить xt берет свое значение раньше x обновляется, yt берет свое значение раньше y обновляется, и xt а также yt определяются до их использования.

10

Другие решения

Если две переменные имеют тип int (или другой простой тип), исходный оператор (x++=y++) является незаконным. Однако в случае арифметики с указателями это допустимо. Один из способов скопировать строку, где оба x а также y являются char *, является

while ( *x++ = *y++ );

в этом случае указатель увеличивается после того, как соответствующий символ скопирован, и цикл повторяется до тех пор, пока не встретится символ конца строки ( NULL) в строке, на которую указывает y,

0

По вопросам рекламы [email protected]