我的计划如下:
#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++
?
答案 0 :(得分:3)
相当于:
*y = *z;
y++;
z++;
我无法理解这个程序的输出
你正在打印指针,没有什么可以理解的。
%p
而不是%d
答案 1 :(得分:3)
y
和z
是指针,表达式y++
和z++
正在使用后缀运算符,因此两个增量都将在之后发生任务。
这句话做了三件事:
y
指向的值z
指向的相同值:*y = *z
。y
指针。现在y
指向内存中的 next int
。z
指针。现在z
指向内存中的 next int
。 如果在语句后使用y
和z
,那么最后两个会很糟糕:y
和z
现在指向不属于该语句的未初始化内存代码。
答案 2 :(得分:1)
*y++=*z++;
- 这只是将指针z
中存储的值分配给*y
。在此之后,它递增y
和z
指针。在此语句之后取消引用z
和y
可能会导致崩溃(未定义的行为)。
这种语句用于字符串复制实现
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)
变量y
和z
是整数的指针,在这种情况下,指向变量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?
以上导致未定义的行为(在下一个序列点之前进行多次修改)。