第10题:考查形式参数,实际参数,指针和数组
#include <stdio.h>
void f1(int *, int);
void f2(int *, int);
void(*p[2])( int *, int);
void main()
{
int a;
int b;
p[0]= f1;
p[1]= f2;
a=3;
b=5;
p[0](&a, b);
printf("%d\t%d\t" , a ,b);
p[1](&a, b);
printf("%d\t%d\t \n" , a ,b);
}
void f1( int* p , int q)
{
int tmp;
tmp=*p;
*p= q;
q=tmp;
}
void f2( int* p , int q)
{
int tmp;
tmp=*p;
*p= q;
q=tmp;
}
这段程序的输出是:
(a)5 5 5 5 (b) 3 5 3 5 (c) 5 3 5 3 (d) 3 3 3 3
解答:
很显然选a.
f1交换*p和q的值,f1执行完后,*p 和q的值的确交换了, 但q的改变不会影响到 b的改变, *p 实际上就是a
所以执行f1后, a=b=5
这道题考查的知识范围很广,包括typedef自定义类型,函数指针,指针数组
void(*p[2 ]) ( int *, int);
1)定义了一个函数指针的数组p,
2)p有两个指针元素. 元素是函数的指针;
3)函数指针指向的函数是一个带2个参数,返回void的函数,所带的两个参数是指向整型的指针和整型