函数那点事-C语言
无参数无返回值函数
void fun();
void fun()
{
printf("I am fun\n");
return;
}
无参数有返回值函数
int add();
int add()
{
int a=1,b=2;
return a+b;
}
有参数有返回值函数
int add(int a,int b);
int add(int a,int b)
{
return a+b;
}
无返回值参数为数组
void display(float array[],int n);
void display(float array[],int n)
{
int i=0;
for(i=0;i<n;i++)
{
printf("%.2f ",array[i]);
}
return;
}
返回值参数都是数组
float* input(float array[],int n);
float* input(float array[],int n)
{
float arr[10]={1,2,3,4,5,9,7,8,0,6};
int i=0;
for(i=0;i<n;i++)
{
scanf("%f",&array[i]);
}
return array;
}
无返回值参数为指针的函数
void fun(int *p);
void fun(int *p);
{
printf("形参修改前:%d\n");
scanf("%d",p);
}
int main()
{
int a=5;
fun(&a);
printf("%d\n",a);
return 0;
}
返回值和参数都是指针的函数
int* fun(int* p);
int* fun(int* p)
{
(*p)+=6;
return p;
}
函数指针
int (*p)(int a,int b);
int fun(int a,int b)
{
printf("%d和%d的和:%d\n",a+b);
return a+b;
}
int fun1(int a,int b)
{
printf("%d和%d的积:%d\n",a*b);
return a*b;
}
int main()
{
int a=8,b=9;
p=fun;
p(a,b);
p=fun1;
p(a,b);
return 0;
}
函数指针数组
int (*p[2])(int ,int );
int add(int a,int b)
{
printf("和:%d\n",a+b);
return a+b;
}
int sub(int a,int b)
{
printf("差:%d\n",a-b);
return a-b;
}
int main()
{
p[0]=add;
p[1]=sub;
p[0](5,6);
p[1](7,3);
return 0;
}
回调函数
#include<stdio.h>
int callback(int a);
int callbackb(int a);
void call(int (*p)(int));
int main(int argc,char **argv)
{
call(callback);
call(callbackb);
int (*p1)()=callback;
int n1=p1(4);
printf("%d\n",n1);
return 0;
}
int callbackb(int a)
{
return a*10;
}
int callback(int a)
{
return a*=a;
}
void call(int (*p)(int))
{
int n=2;
int n1=p(n);
printf("%d\n",n1);
}
#include<stdio.h>
int add(int a,int b);
int min(int a,int b);
int mul(int a,int b);
int div(int a,int b);
int caller(int (*p[])(int,int));
int main(int argc,char **argv)
{
int a=0,b=0;
char n='\0';
int(*p[4])(int,int)={add,min,mul,div};
caller(p);
return 0;
}
int caller(int (*p[])(int,int))
{
char n=0;
int a=0,b=0;
scanf("%d%d",&a,&b);
getchar();
scanf("%c",&n);
switch(n)
{
case '+':printf("%d\n",p[0](a,b));break;
case '-':printf("%d\n",p[1](a,b));break;
case '*':printf("%d\n",p[2](a,b));break;
case '/':printf("%d\n",p[3](a,b));break;
default:break;
}
}
int add(int a,int b)
{
return a+b;
}
int min(int a,int b)
{
return a-b;
}
int mul(int a,int b)
{
return a*b;
}
int div(int a,int b)
{
if(b!=0)
{
return a/b;
}else
{
printf("除数不能为0\n");
}
}
返回值为函数指针的函数
#include<stdio.h>
int* fun(char*,float);
int* (*fun1[10])(char*,float);
typedef int* (*P)(char*,float);
int func(int* (*p)(char*,float),char*,float);
P func1(int* (*p)(char*,float),char*,float);
int main(int argc,char **argv)
{
char a='1',c='2';
float b=3.4,d=5.4;
int* (*p1)(char*,float);
fun(&a,b);
func(fun,&c,d);
p1=func1(fun,&a,b);
printf("返回值:");
p1(&c,d);
fun1[0]=fun;
printf("函数指针数组:");
fun1[0](&a,d);
return 0;
}
int* fun(char* a,float b)
{
int c=(int)*a+(int)b;
printf("fun函数:%d\n",c);
return NULL;
}
int func(int* (*p)(char*,float),char* a,float b)
{
printf("参数为fun函数类型:");
p(a,b);
}
P func1(int* (*p)(char*,float),char* a,float b)
{
printf("返回值为fun函数类型指针:");
p(a,b);
return p;
}