--------------------------------------------------------------------------------------
指向一维函数的指针
#include<stdio.h>
#include<stdlib.h>
int main()
{
int as[3]={11,22,33};
int (*p)[3]=&as;
printf("**p=%d\n",**p);
printf("as[2]%d\n",*(*p+2));
printf("%x下一个单元格的首地址\n",*(p+1));
printf("as[2]%d\n",*(*(p+1)-1));
printf("as[1]%d\n",*(*p+1));
printf("as[1]%d\n",*(*(p+1)-2));
return 0;
}
--------------------------------------------------------------------------------------
函数指针
#include<stdio.h>
#include<stdlib.h>
void funa();
void funb();
void fund(void (*p)());
void main()
{
void (*p)();
p=&funa;
(*p)();
p=&funb;
(*p)();
fund(&funa);
fund(&funb);
}
void funa()
{
printf("void funa()\n");
}
void funb()
{
printf("void funb()\n");
}
void fund(void (*p)())
{
(*p)();
}
--------------------------------------------------------------------------------------------
指向函数指针的指针
#include<stdio.h>
void funa();
void funb();
void fun(void (*)());
void main()
{
void (*pp)(void (*p)());
pp=&fun;
(*pp)(&funa);
(*pp)(&funb);
}
void funa()
{
printf("void funa()\n");
}
void funb()
{
printf("void funb()\n");
}
void fun(void (*p)())
{
(*p)();
}
-------------------------------------------------------------------------------------------
返回值为函数指针的函数
#include<stdio.h>
void funa();
void funb();
void (*funx(void (*p)()))();
void main()
{
void (*point)()=funx(&funa);//定义函数指针,void (*)()为类型 point为名字
(*point)();
point=funx(&funb);
(*point)();
}
void funa()
{
printf("void funa()\n");
}
void funb()
{
printf("void funb()\n");
}
void (*funx(void (*p)()))()//函数参数是函数指针,返回类型为函数指针
{
return p;
}
-------------------------------------------------------------------------------------------------------
函数指针公司用法
#include<stdio.h>
typedef void (*pFun)();
void funa();
pFun funx(pFun p);
void main()
{
pFun p1=funx(&funa);
(*p1)();
}
void funa()
{
printf("void funa\n");
}
pFun funx(pFun p)
{
return p;
}
----------------------------------------------------------------------------
综合
#include<stdio.h>
void funa()//输出
{
printf("void funa()\n");
}
void funx(void (*p)())//参数为函数指针的函数
{
(*p)();
}
void (*funxx(void (*p)()))()//返回值为函数指针的函数,参数为函数指针的函数
{
return p;
}
void main()
{
void (*point)();//定义一个函数指针
void (*pp)(void(*p)());//定义一个指向函数指针的指针,注意:要写函数参数
void (*p)()=&funa;//定义一个函数指针
(*p)();
//----------------------------------
funx(&funa);//直接调用参数为函数指针的函数
//----------------------------------
pp=&funx;
(*pp)(&funa);//通过定义指向函数指针的指针调用
//----------------------------------
point=funxx(&funa);//通过定义指向函数指针,调用返回值为函数指针的函数
(*point)();
}