-6

C中下面这行是什么意思,它的执行顺序是什么?

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

任何人都可以解释这是如何评估的吗?

4

2 回答 2

10

对于原始代码:

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,以及xtyt使用之前定义。

于 2013-05-10T19:33:18.473 回答
0

如果这两个变量是 int (或其他简单类型),则原始语句 ( x++=y++) 是非法的。但是,在指针算术的情况下,这是合法的。复制字符串的一种方法是和x,是ychar *

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

在这种情况下,指针在复制相应的字符后递增,循环迭代,直到遇到NULL指向的字符串中的字符串结尾字符 (a) y

于 2013-05-10T19:38:01.223 回答