指针作为函数参数
函数通过地址传参来引用数组,这里不再赘述,可参考之前文章:
1.数组与函数的综合应用
2.指针与数组
返回指针的函数
返回类型 *函数名(形参表)
{
函数体
}
典例
char *compare(char *str1,char *str2)
{
if(strlen(str1)>strlen(str2))
{
return str1;
}
else if(strlen(str1)<strlen(str2))
{
return str2;
}
else
{
char *r = "一样长";
return r;
}
}
main()
{
char *str1="helloworld";
char *str2="hello";
char *p=compare(str1,str2);
printf("%s\n",p);
}
函数指针
//demo函数
void fun1()
{
printf("in function1!\n");
}
void fun2()
{
printf("in function2!\n");
}
int add(int x,int y)
{
return x+y;
}
main()
{
int i=10;
printf("i=%d\n",i); //通过变量名访问变量
fun1(); //通过函数名访问函数
int *p;
p=&i;
printf("by address a=%d\n",*p); //通过地址访问a
}
问题引入:如何通过地址访问函数
//1.如何定义一个函数指针
void (*p2)();
//a.如何表示指针: * b.如何知道是函数指针:指针后面带括号
//c.函数指针是专用的,格式要求很强(参数类型,个数,返回值),就像指针数组一样
//2.如何给函数指针赋值
p2=fun2; //函数名就是地址,就像数组一样
//3.如何通过函数指针条用函数
p2(); //直接通过指针名字+()
(*p2)(); //取内容 ,(*指针名字)()
int (*padd)(int x,int y);
padd=add;
int ret=padd(1,2);
printf("%d\n",ret);
ret=(*padd)(1,2);
printf("%d\n",ret);