Что означает следующая строка в C. Каков порядок ее выполнения?
float *x,*y;
*x++=*y++
Кто-нибудь может объяснить, как это оценивалось?
Для оригинального кода:
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
определяются до их использования.
Если две переменные имеют тип int (или другой простой тип), исходный оператор (x++=y++
) является незаконным. Однако в случае арифметики с указателями это допустимо. Один из способов скопировать строку, где оба x
а также y
являются char *
, является
while ( *x++ = *y++ );
в этом случае указатель увеличивается после того, как соответствующий символ скопирован, и цикл повторяется до тех пор, пока не встретится символ конца строки ( NULL
) в строке, на которую указывает y
,