c语言 全局变量什么的 分析一下题目

#include<stdio.h>
void f1( int x, int y);
void f2( int *x, int y );
void f3( int x, int *y );
void f4( int *x, int *y);
void main()
{int a=1, b=2;

f1(a, b);
printf(“a=%d, b=%d \n”, a,b);

a = 1, b = 2;
f2(&a, b);
printf(“a=%d, b=%d \n”, a,b);

a = 1, b = 2;
f3(a, &b);
printf(“a=%d, b=%d \n”, a,b);

a = 1, b = 2;
f4(&a,&b);
printf(“a=%d, b=%d \n”, a,b);
}
void f1(int x, int y)
{int t;
t = x;x = y; y = t;
}

void f2(int *x, int y)
{int t;
t = *x; *x = y; y = t;
}

void f3(int x, int *y)
{ int t;
t = x; x = *y; *y = t;
}

void f4( int *x, int *y)
{int t;
t=*x; *x=*y; *y=t;
}

(19) 程序运行时,第一行输出 。
A. a=1, b=2 B. a=2, b=1
C. a=1, b=1 D. a=2, b=2

(20) 程序运行时,第二行输出 。
A. a=1, b=2 B. a=2, b=1
C. a=1, b=1 D. a=2, b=2

(21) 程序运行时,第三行输出 。
A. a=1, b=2 B. a=2, b=1
C. a=1, b=1 D. a=2, b=2

(22) 程序运行时,第四行输出 。
A. a=1, b=2 B. a=2, b=1
C. a=1, b=1 D. a=2, b=2

分析一下题目 不懂
这其实就是考察C语言中的指针以及函数传参的问题。
1、在f1中函数对两个形参x,y(他们其实是a,b的拷贝)的值进行了交换,但对原来的实参a,b并没有什么影响,所以a=1,b=2.
2、在调用f2时,第一个参数x传递的是a的地址&a,*x就是a的值,在f2中,对*x的改变(*x=y)就是对a的改变,而第二个参数y传递的是b的拷贝,仍然为形参,故b不变,所信拍缺以a=2,b=2.
f3与滑辩f4的分析类似,3的结果为:a=1,b=1.4的结果为a=2,b=1.
综上,答案为:A,D,C,B
总之,要改变实参的值,必须传递实参的地址给形参。若只是传递实参值给形贺轮参,那么函数对形参所做的任何改变均不会影响到原来实参的值!
B
C
D
A