C中下面这行是什么意思,它的执行顺序是什么?
float *x,*y;
*x++=*y++
任何人都可以解释这是如何评估的吗?
对于原始代码:
x++ = y++
该行永远不会被评估,因为它不是合法的 C 并且不会被编译。的结果x++
不是左值,并且不允许出现在赋值的左侧。
对于更新的代码:
float x,y;
*x++ = *y++
这是不合法的,因为*
不能应用于float
.
我将添加此代码:
float *x, *y;
*x++ = *y++;
这段代码说:
float *xt
,相等x
的。float *yt
,相等y
的。x
.y
.*xt = *yt
.实际操作可以按各种顺序执行,providext
在更新之前x
取其值,在更新yt
之前取其值y
,以及xt
在yt
使用之前定义。
如果这两个变量是 int (或其他简单类型),则原始语句 ( x++=y++
) 是非法的。但是,在指针算术的情况下,这是合法的。复制字符串的一种方法是和x
,是y
char *
while ( *x++ = *y++ );
在这种情况下,指针在复制相应的字符后递增,循环迭代,直到遇到NULL
指向的字符串中的字符串结尾字符 (a) y
。