新天堂2血盟盟标:后天考c语言,可是复习时候碰到一些困难,请问大家帮忙解答!急6

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/06 01:37:36
4)有以下程序
?? void f(int *x,int *y)
??{
??int t;
??t=*x;*x=*y;*y=t;
??}
??main()
??{
??int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
??p=a;q=&a[7];
??while(p<Q)
??{f(p,q);p++;q--;}
??for(i=0;i<8;i++)printf("%d,",a[i]);
??}
??程序运行后的输出结果是__D____。
??A)8,2,3,4,5,6,7,1, B)5,6,7,8,1,2,3,4,
??C)1,2,3,4,5,6,7,8, D)8,7,6,5,4,3,2,1,

我想问下 这个程序说的是什么意思啊?还有其中的p=a是什么意思,

为什么题目是p=a 而不是 p=a[ i ] 什么的。a 不是没有定义么 。只有定

义了int a[8]啊

看来楼主的c还没入门哈……呵呵
答案选d
————————————————————
函数void f(int *x,int *y) 是交换函数用来交换指针变量x和y的地址。

{f(p,q);p++;q--;}
??for(i=0;i<8;i++)printf("%d,",a[i]);
就是对数组a的从大到小排列。
————————————————————————
“p=a;”是给定义的指针变量p赋值等效与在定义p时赋值int a[8]={1,2,3,4,5,6,7,8},i,*p=a,*q;因为a是数组,本身就是地址所以不能想普通变量一样这样赋值p=&a;
——————————————————————————
“是p=a 而不是 p=a[ i ]”p=a;是把数组a的首地址赋予了指针变量p由于a的首地址跟a中第一个元素的地址是一样的即“p=a”跟“p=&a[0]"(注意这里要有"&"因为a[0]是一个int型变量)是等效的。所以不能“p=a[ i ]”这样赋值,而必须p=&a[ i ]”表示把数组a中第i个元素的地址赋指针变量p。
————————————————————
a不是没有定义!
int a[8]={1,2,3,4,5,6,7,8};就已经声明了数组a并且做了初始化赋值。
a只是一个数组名。8表示该数组中有8个元素。

p=a p指向a[8]数组的首地址 ,即a[0]的地址

这个问题就是利用指针来将一个数组倒序,
p,q都是指针,p指的是a[8]这个数组的首地址,也就是a[1]的地址,q指向的是最后一个数的地址,也就是a[7]的地址,f(p,q)函数就是交换两个数,然后,pq指针向中间移动,边移动边交换,知道交换到,p>q是,也即使4,5交换以后,输出数组;

void f(int *x,int *y) //交换x和的数据。
??{
??int t;
??t=*x;*x=*y;*y=t;
??}
p=a;q=&a[7]; p取得a[0]的地址,q取得a[7]的地址。
while(p<Q) //依次交换a[0]&a[7],a[1]&a[6],a[2]&a[5],a[3]&a[4]的数据。
??{f(p,q);p++;q--;}