全部博文(92)
分类: 嵌入式
2010-06-12 15:30:15
带参数的函数
数组名作函数参数
用数组名作函数参数时,此时形参应当用数组名或用指针变量 。
例8.11
有一个一维数组score,内放10个学生成绩,求平均成绩。
#include
void main()
{ float average(float array[10]); /* 函数声明 */
float score[10] , aver;
int i;
printf(″input 10 scores:\n″);
for(i=0;i<10;i++=
scanf(″%f″,&score[i]);
printf(″\n″);
aver=average( score );
printf (″ average score is %5.2f\n″, aver);
}
float average (float array[10])
{ int i;
float aver,sum=array[0];
for (i=1;i<10;i++=)
sum=sum+array[i];
aver=sum/10;
return(aver);
}
用数组名作函数参数
将数组a中n个整数按相反顺序存放
void inv(int x[ ],int n) /*形参x是数组名*/
{ int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
return;
}
对刚才的程序可以作一些改动。将函数inv中的形参x改成指针变量。
void inv(int *x,int n) /*形参x为指针变量*/
{int?p,temp,*i,*j,m=(n-1)/2;
i=x;j=x+n-1;p=x+m;
for(;i<=p;i++,j--)
{temp=*i;*i=*j;*j=temp;}
return;
}
实参为指针变量,形参为数组名。如:
void main()
{int a[10],*p=a; (int *p; p=a;)
┇
f(p,10);
}
void f(int x[ ],int n)
{
}
字符指针作函数参数
用数组
void copy_string(char from[ ], char to[ ])
{ int i=0;
while(from[i]!=′\0′)
{to[i]=from[i];i++;}
to[i]=′\0′;
}
用指针
void copy_string (char *from,char *to)
{while((*to=*from)!=′\0′)
{to++;from++;}
}
•copy_string函数的函数体还可写成
{
while(*from!=′\0′)
*to++=*from++;
*to=′\0′;
}
用指向函数的指针作函数参数
函数指针变量常用的用途之一是把指针作为参数传递到其他函数。指向函数的指针也可以作为参数,以实现函数地址的传递,这样就能够在被调用的函数中使用实参函数。
实参函数名 f1 f2
↓ ↓
void sub(int (*x1)(int),int (*x2)(int,int))
{ int a,b,i,j;
a=(*x1)(i); /*调用f1函数*/
b=(*x2)(i,j);/*调用f2函数*/
…
}
设一个函数process,在调用它的时候,每次实现不同的功能。输入a和b两个数,第一次调用process时找出a和b中大者,第二次找出其中小者,第三次求a与b之和。
#include
void main()
{ int max(int,int); /* 函数声明 */
int min(int,int); /* 函数声明 */
int add(int,int); /* 函数声明 */
void process (int , int , int(*fun)()); /* 函数声明 */
int a,b;
printf(″enter a and b:″);
scanf(″%d,%d″,&a,&b);
printf(″max=″);
process(a,b,max);
printf(″min=″);
process(a,b,min);
printf(″sum=″);
process(a,b,add);
}
void process(int x,int y,int (*fun)(int,int))
{ int result;
result=(*fun)(x,y);
printf(″%d\n″, result);
}
指针数组作main函数的形参
void main(int argc,char *argv[ ])
{while(argc>1)
{++argv;
printf(″%s\n″,argv);
--argc;
}
}