Chinaunix首页 | 论坛 | 博客
  • 博客访问: 333910
  • 博文数量: 92
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 960
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-21 19:38
文章分类

全部博文(92)

文章存档

2010年(71)

2009年(21)

我的朋友

分类: 嵌入式

2010-06-12 15:30:15

带参数的函数

数组名作函数参数

用数组名作函数参数时,此时形参应当用数组名或用指针变量

8.11

有一个一维数组score,内放10个学生成绩,求平均成绩。

#include

void main()

float  averagefloat array10]);  /* 函数声明 */

     float score[10] , aver

  int i;

  printf(″input 10 scores:\n″);

  for(i=0;i<10;i++=

     scanf(″%f″,&score[i]);

  printf(″\n″);

  averaverage score );

  printf (″ average score is %5.2f\n, aver);

} 

float  average float array10])

int i;

  float  aver,sum=array[0];

  for  (i=1;i<10;i++=)

 sum=sum+array[i];

 aver=sum/10;

 returnaver);

 

用数组名作函数参数

将数组a中n个整数按相反顺序存放

void  invint x[ ],int     /*形参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  invint *x,int     /*形参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_stringchar from ], char to ])

int i=0;

     whilefrom[i]!=′\0′)

 {to[i]=from[i];i++;}

   to[i]=′\0′;

  

用指针

void  copy_string char *fromchar *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 maxintint;            /* 函数声明 */

     int minintint;              /* 函数声明 */

     int addintint);              /* 函数声明 */

     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  mainint  argcchar  *argv[ ]

while(argc>1)

     {++argv

     printf(″%s\n″,argv);

        --argc

       

   

 

阅读(1381) | 评论(0) | 转发(0) |
0

上一篇:int *p()与int (*p)()的区别

下一篇:结构体

给主人留下些什么吧!~~