我在C中看到了这段代码并运行它:
int i,j;
scanf("%d %d"+scanf("%d %d",&i,&j));
printf("%d %d",i,j);
Run Code Online (Sandbox Code Playgroud)
输入:
1 2 3
Run Code Online (Sandbox Code Playgroud)
输出:
3 2
Run Code Online (Sandbox Code Playgroud)
这是非常意外的(逆序和三个输入).
请解释一下.
这个:
scanf("%d %d"+scanf("%d %d",&i,&j));
Run Code Online (Sandbox Code Playgroud)
是可怕的代码!但是发生了什么?
首先,调用内部scanf.它存储1和2成i,并j分别(它应该是显而易见的,为什么这是).然后它返回2,因为这是它存储的东西的数量.然后"跳过"外部scanf格式语句的前两个字符,制作它" %d".然后scanf想要3从某个地方的输入存储,但是在外部scanf调用中没有给出指向变量的指针.接下来会发生什么?它是未定义的行为,但实际的事实是第二个(外部)scanf调用只是重用(或者,如果你愿意,可以踩踏)传递给第一个(内部)scanf的参数.所以存储了3 i,就是这样.
| 归档时间: |
|
| 查看次数: |
420 次 |
| 最近记录: |