</pre><p>1 函数指针</p><p><pre name="code" class="cpp">char (*pFun)(int); //定义一个指向函数的函数指针pFun, 指向的函数参数是int型 返回值是char型
char g1Fun(int a) //定义了一个函数,函数的函数名实际上就是一个指针函数名指向该函数的代码在内存中的首地址。
{
cout<<a<<endl;
return '0';
}
void main()
{
pFun=g1Fun; //函数指针pFun指向g1Fun函数
(*pFun)(2); //执行指向的函数
}
2 返回指针的函数
char *get(void)
{
char *p="this is sring";
return p; //指向静态存储区有效
}
int *get2(void)
{
int i=50;
int *p=&i;
return p; //函数调用完,i释放,无效
}
int *get3(void)
{
int i=40;
return &i;//函数调用完,i释放,无效
}
int *get4(void)
{
static int i=30;
return &i;//指向静态存储区有效
}
char *get5()
{
char ch[10];
strcpy(ch,"hello");
return ch;//函数调用完,ch释放,无效
}
char *get6()
{
char *str;
str=(char *)malloc(10);
strcpy(str,"world");
return str;//分配在堆中,只有free才能释放,有效
}
void main()
{
char *strRev=NULL;
int * pint=NULL;
strRev=get();
puts(strRev);
pint=get2();
cout<<*pint<<endl;
pint=get3();
cout<<*pint<<endl;
pint=get4();
cout<<*pint<<endl;
strRev=get5();
puts(strRev);
strRev=get6();
puts(strRev);
}
3 函数指针应用
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int max(int,int);
int (*p)(int,int)=max;
int a,b,c,d;
printf("input\n");
scanf("%d%d%d",&a,&b,&c);
d=(*p)((*p)(a,b),c);
cout<<d<<endl;
return 0;
}