函数指针与指针函数

1.函数指针

指向函数的指针。本质是一个指针。

指针变量可以指向变量的地址、数组、字符串、动态分配地址,同时也可指向一个函数,每个函数在编译的时候,系统会分配给该函数一个入口地址,函数名表示这个入口地址,那么指向函数的指针变量称为函数指针变量。

引论:
int sumup(int a, float b);
int (*p3) (int a, float b); //加入p3=&sumup;则p3作为指针指向sumup。这就是p3指针指向函数
【回顾:两者的返回值和形参都是 int (int a, float b);】
int* (*p4)(int a, float b);
从类型上看,int* (int a, float b) 是上式函数的指针。故有:p4 = &p3;
int (*p) (int x); // 声明一个函数指针

//可以通过以下两种方式将func函数的首地址赋给指针p

p=func;

p=&func;

取地址运算符&不是必需的,因为单单一个函数标识符就标号表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。可以采用如下两种方式来通过指针调用函数:

x=(*p)();

x=p();    //虽然看起来和普通的调用无异,但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的

如使用引论中的例子有如下的调用:
sumup (100,1.21);
(*p3) (100,1.21); //与上等价
*(p4) (100,1.21); //与上等价
示例程序:

void (*funcp)();
void FileFunc(),EditFunc();

main()
{
funcp=FileFunc;
(*funcp)();
funcp=EditFunc;
(*funcp)();
}

void FileFunc()
{
printf(FileFunc\n);
}

void EditFunc()
{
printf(EditFunc\n);
}
程序输出为:
FileFunc
EditFunc
2.指针函数

指带指针的函数,即本质是一个函数。函数返回的类型是某一类型的指针,即返回一个地址给调用函数,以用于需要指针或者地址的表达式中。
类型标识符 *函数名(参数表)
如:
声明:int * f(x);
int *p;
调用:p=f(a);
int * GetDate(int wk,int dy) //返回某元素的地址
{
static int calendar[5][7]={
{1,2,3,4,5,6,7},
{8,9,10,11,12,13,14},
{15,16,17,18,19,20,21},
{22,23,24,25,26,27,28},
{29,30,31,-1}
};
return &calendar[wk-1][dy-1];
}

main()
{
int wk,dy;
do
{
printf(Enter week(1-5)day(1-7)\n);
scanf(%d%d,&wk,&dy);
}
while(wk5 || dy7);
printf(%d\n,*GetDate(wk,dy));
}

永不止步步 发表于12-29 10:12 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:308467个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号