我试图在一些测试中解决这个问题,但后来当我在家里运行时,它给出了意想不到的答案.我无法理解这段代码:
#include <stdio.h>
#include <conio.h>
#define swap(a,b) temp=a; a=b; b=temp;
int main()
{
int i, j, temp;
i=5;
j=10;
temp=0;
if( i > j) //evaluates to false
swap( i, j );
printf( "%d %d %d", i, j, temp); //expected output: 5 10 0
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:10 0 0
请有人解释它是如何工作的.
Moh*_*ain 11
代码如下
if( i > j) //evaluates to false
swap( i, j );
Run Code Online (Sandbox Code Playgroud)
变
if( i > j) //evaluates to false
temp=i; i=j; j=temp;
Run Code Online (Sandbox Code Playgroud)
这相当于
if( i > j) //evaluates to false
{temp=i;} i=j; j=temp;
Run Code Online (Sandbox Code Playgroud)
如果条件为假,则会出现如下意外结果
i=5;
j=10;
temp=0;
i=j; /* i becomes 10 */
j=temp; /* j becomes 0 */
Run Code Online (Sandbox Code Playgroud)
学习收获
{}
#define swap(a,b) do { temp=a; a=b; b=temp; } while(0)
请注意,while(0)之后没有终止分号
归档时间: |
|
查看次数: |
215 次 |
最近记录: |