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

时间:2012-08-15 06:53:13

标签: c pointers

我的计划如下:

#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++

8 个答案:

答案 0 :(得分:3)

相当于:

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

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

你正在打印指针,没有什么可以理解的。


  • 打印指针时,您应该使用%p而不是%d
  • 当你增加指针时,你正在超越已知的宇宙

答案 1 :(得分:3)

yz是指针,表达式y++z++正在使用后缀运算符,因此两个增量都将在之后发生任务。

这句话做了三件事:

  1. 指定y指向的值z指向的相同值:*y = *z
  2. 递增y指针。现在y指向内存中的 next int
  3. 递增z指针。现在z指向内存中的 next int
  4. 如果在语句后使用yz,那么最后两个会很糟糕:yz现在指向不属于该语句的未初始化内存代码。

答案 2 :(得分:1)

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

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

void my_strcpy(char *dest, char* src)
{
   while((*dest++ = *src++));
}

答案 3 :(得分:0)

这与:

相同
*y = *z;
++z;
++y;

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分: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指向的值?

答案 7 :(得分:0)

*y++=*z++;  //wat  does this mean?

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