芯源半导体CW32
直播中

李春梅

8年用户 1984经验值
私信 关注
[经验]

函数指针及指针函数的区别

在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,和大家的一些总结,整理到此。和大家分享。
  首先它们之间的定义:
  1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针
  类型标识符 *函数名(参数表)
  int *f(x,y);
  首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
  表示:
  float *fun();
  float *p;
  p = fun(a);
  注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。
  来讲详细一些吧!请看下面
  指针函数:
  当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。
  格式:
  类型说明符 * 函数名(参数)
  当然了,由于返回的是一个地址,所以类型说明符一般都是int。
  例如:int *GetDate();
  int * aaa(int,int);
  函数返回的是一个地址值,经常使用在返回数组的某一元素地址上。
  int * GetDate(int wk,int dy);
  main()
  {
      int wk,dy;
      do
      {
          printf(Enter week(1-3)day(1-4)n);
          scanf(%d%d, wk, dy);
      }
      while(wk<1||wk>3||dy<1||dy>4);
      printf(%dn,*GetDate(wk,dy));
  }


  int * GetDate(int wk,int dy)
  {
      static int calendar[3][4]=
      {
          {1,2,3,4},
          {5,6,7,8},
          {9,10,11,-1}
      };
      return  calendar[wk-1][dy-1];
  }
  程序应该是很好理解的,子函数返回的是数组某元素的地址。输出的是这个地址里的值。

更多回帖

发帖
×
20
完善资料,
赚取积分