1

我的程序如下:

#include<stdio.h>
main()
{
  int x=30,*y,*z;
  y=&x;
  z=y;
  *y++=*z++;  //what does this mean?
  x++;          
  printf("%d %d",y,z);  
  return 0;
}

这句话的含义是什么:*y++=*z++?

4

8 回答 8

3

yandz是指针,而表达式y++andz++使用后缀运算符,因此这两个增量都将在赋值之后发生。

这条语句做了 3 件事:

  1. 分配给 : 所指向y的相同值所指向的z*y = *z
  2. 增加y指针。现在y指向内存中的下一个 int
  3. 增加z指针。现在z指向内存中的下一个 int

y如果和z在语句之后使用,最后两个将是不好的:y现在z指向不属于代码的未初始化内存。

于 2012-08-15T06:57:06.393 回答
3

它相当于:

*y = *z;
y++;
z++;

我无法理解这个程序的输出

您正在打印指针,没有太多要理解的。


  • 您应该在打印指针时使用%p而不是%d
  • 当您增加这些指针时,您正在超越已知的宇宙
于 2012-08-15T06:54:53.930 回答
1

*y++=*z++;- 这只是将存储在指针中的值分配z*y. 在此之后,它的yz指针都递增。在此声明后取消引用两者zy可能导致崩溃(未定义的行为)。

这种语句用于字符串复制实现

void my_strcpy(char *dest, char* src)
{
   while((*dest++ = *src++));
}
于 2012-08-15T07:08:24.173 回答
0

变量yz是指向整数的指针,在这种情况下,指向变量 x 的地址。

以下几行将 的值设置y为的地址x(即为&x您提供 `x 的地址)。

y=&x;
z=y

下一行*y++=*z++;并不完全有意义,可能会也可能不会编译,具体取决于使用的编译器。在 GCC 4.3.2 的情况下,它给出了以下错误。

foo.c:7: error: invalid operands to binary * (have ‘int *’ and ‘int *’)

看起来您正在尝试进行指针运算,但操作符的优先级有点混乱。您是否尝试z在将预增量值分配给某个位置后增加指向的值?

于 2012-08-15T07:07:02.113 回答
0

这只是将 指向的对象的值分配给 指向的对象的值yz然后递增两个指针。

于 2012-08-15T06:55:22.790 回答
0

它将简单地将 y 指向的对象的值分配给 z 指向的对象的值,最后它递增两个指针。

于 2012-08-15T06:56:15.497 回答
0

这与以下内容相同:

*y = *z;
++z;
++y;
于 2012-08-15T06:55:11.683 回答
0
*y++=*z++;  //wat  does this mean?

以上导致未定义的行为(在下一个序列点之前进行多次修改)。

于 2012-08-15T11:58:34.020 回答