编写一个交换变量值的函数,利用该函数交换数组a和数组b中的对应元素值。要求尽量用指针的方法实现。

#include<stdio.h>
void main()
{
int *p,*q,a[10],b[10],i,m;
int (*exchange)();
p=exchange;
for(i=0;i<10;i++)
scanf("%d",a[i]);
for(i=0;i<10;i++)
scanf("%d",b[i]);
(*p)(a,b);
}

int exchange(int *a,int *b)
{ int *p,*q,m;
for(p=a,q=b;p<a+10,q<b+10;p++,q++)
{m=*p;*p=*q;*q=m;}
for(p=a;p<a+10;p++)
printf("%d",*p);
printf("\n");
for(q=b;q<b+10;q++)
printf("%d",*q);
}

你这个exchange函数就可以。只不过你的程序里有几处语法错误。改了就可以了。
#include<stdio.h>
int main()
{
int *q,a[10],b[10],i,m;
void exchange(int* a, int* b);
void (*p)( int* a, int* b );
p = exchange;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
scanf("%d",&b[i]);
(*p)(a,b);

system( "pause" );
}

void exchange(int *a,int *b)
{ int *p,*q,m;
for(p=a,q=b;p<a+10,q<b+10;p++,q++)
{m=*p;*p=*q;*q=m;}
for(p=a;p<a+10;p++)
printf("%d ",*p);
printf("\n");
for(q=b;q<b+10;q++)
printf("%d ",*q);
}追问

为什么(*p)(a,b);会出现term does not evaluate to a function这个错误呢
怎么改正确啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-10
3
第2个回答  2012-06-10
p=exchange;//这里错误 exchange为函数指针 而p为整形指针 不能将函数指针赋值给整形指针
你可以直接使用exchange函数名调用函数
也可以 重新定义P为函数指针 再把exchange赋给P 再通过P调用函数
int (*P) (int *,int *);//定义p为函数指针 函数类型为 返回值为int 形参类型 为2个整形指针
p=exchange;
(*p)(a,b);
函数名本身就代表函数指针
用函数指针调用函数时,可以用解引用操作符 也可以不用解引用操作符
相似回答