函数指针的几种不同用法
函数指针的用法
函数指针的几种不同用法(基础)
LCC-Win32 3.3 (Oct 6,2004)编译
=============================
#include <stdio.h>
void func(int i)
{
printf("This is for test %i\r\n", i);
}
typedef void (*PFUNC)(int);
struct FUNC{
PFUNC pfunc;
};
void callfunc(void pfunctions(int), int i)
{
pfunctions(i);
}
int main(int argc, char* argv[])
{
void (*pfunc)(int); //定义一个 形参int,返回值类型void的 函数指针
pfunc = &func; //为该函数指针赋值
pfunc(1);
//函数指针作为函数参数
callfunc(pfunc, 2);
//函数指针作为结构体成员
struct FUNC sfunc;
sfunc.pfunc = &func;
sfunc.pfunc(3);
return 0;
}
======================
Greg Shaw(本站特约作者)
作者:greg 更新日期:2004-11-07
来源:本站
浏览次数:
相关文章
相关评论 发表评论
David [2004-11-07]
不错,虽然只是添加了几个注释而已
David [2004-11-07]
下面的问答也很经典
================================
问: 关于函数指针使用方式请教:
void gainset (unsigned char (*P)() )
{
unsigned char a,b;
(*p)(a,b);
}
void dspset(unsigned char x,unsigned char y )
{
.............. .............
}
main (void)
{
gainset(dsp);
}
回答:
void gainset (unsigned char (*P)() )
{
unsigned char a,b; (*p)(a,b);
}
1。那个p怎么一个大写一个小写?本意是同一个吗?
2。如果是同一个,你的意思是用函数指针p做为函数gainset的参数,那么参数一定要匹配。你的指针p指向的函数是带参数的还是 不带参数的?你这里矛盾了: 这里(*p)(a,b)是带参数a,b的。与unsigned char (*P)() 这个原型不匹配。
3。如果你在gainset里只是调用另一个函数dsp,那么根本上你对函数指针的用法有点问题。这样用:
unsigned char (*p)();
unsigned char dsp(void)
{
......
}
void main(void)
{
......
p = dsp;
(*p)(); //这样就调用函数dsp了 ......
}
这里如果你的函数指针指向的函数是带两个uchar参数的,则要声明为: unsigned char (*P)(unsigned char a,unsigned char b);
===========================