打印
[AT32F425]

函数指针和指针函数

[复制链接]
630|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
updownq|  楼主 | 2023-12-23 13:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天学习了一下函数指针和指针函数的区别,函数指针是指向函数的指针,它的定义方式为:int (*f)();指针函数是返回指针的函数,它的定义方式为:int *f()。


   写了一个小程序来测验了一下指针函数。


int *func(int *a,int *b);
const int TAB[] = {0x0051,0x1011,0x1111,0x2222};


void main(void)
{
    int *rom_ptr;
   int i,*m,*n;
   m = TAB;
   n = TAB+1;
   rom_ptr = func;   //获得func函数的首地址
   i = func(m,n);
}


int *func(int *a,int *b)
{
  int *p1,*p2;
p1 = a;
p2 = b;
  return *p1 + *p2;
}


上面用到的是指针函数,函数int *func(int *a,int *b)返回的是指向整形数的指针,主要看调用的格式应该是i = func(m,n); 而不是i = *func(m,n);或者i = func(*m,*n); 最后的结果是i=0x1062。从上面可以看到,获得函数首地址的一种方法是直接
rom_ptr = func; 就可以了。


下面这段程序是函数指针的用法:


int func(int a,int b);


void main(void)
{
   int i,m=1,n=2;
   int (*f)(int,int); //定义了一个函数指针;
   f = func;         //将函数func的首地址赋给f,使它指向函数func;
   i = (*f)(m,n);  //通过指针f调用函数func


}


int func(int a,int b)
{
   return (a+b);
}


上面这段程序定义了一个指向函数int func(int a,int b)的指针int (*f)(int,int),得到的结果为 i="3"。


指针函数 是一个(返回指针的)函数,函数指针 是一个(指向函数的)指针。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

3104

帖子

1

粉丝