C高级之指针(二)

指针函数与函数指针

1.    指针函数

指针函数的本质是一个函数,这个函数返回一个指针类型的数据,即返回一个地址。

指针函数的定义形式为:

类型名 *函数名(参数列表)

很多字符串处理函数都是指针函数,返回一个字符指针

例如:

char *strncpy(char *dest, const char *src,size_t n);

返回一个指向dest字符串首地址的字符指针

char *strncat(char *dest, const char *src,size_t n);

返回值同上

2.    函数指针

函数指针的本质是一个指针,这个指针指向函数的入口地址。

1)    定义函数指针

函数指针的定义形式为:

<类型名> (*<指针变量名>)(参数列表)

注意:*外别忘了括号()。

再定义一个函数指针时,要保证这个指针与所代表的函数的返回值类型一样,参数列表一样。

例如:

定义一个函数指针指向一个函数,该函数定义如下:

int fun(int i, int j);

只需将fun改为(*p)即可

int (*p)(int i,int j);

2)    使用函数指针调用函数

示例:写一个函数,求出2个数的和。调用函数用函数指针实现。

#include <stdio.h>

int add(int i, int j);

int main(int argc, const char *argv[])

{

       intm, n;

       intsum;

       int(*p)(int i, int j);

       p= add;

       m= 3, n = 4;

       sum= p(m, n);

       printf("sum= %d\n",sum);

       return0;

}

int add(int i, int j)

{

       returni + j;

}

3.    如何更好的区分数组指针与指针数组,函数指针与指针函数

在上一篇博客中介绍了数组指针与指针数组,这篇介绍了函数指针与指针函数,可能有人会被这些名词绕晕。这里有几个点能够帮助理解区分他们。

1) 组合名词最后一个名词是主语是本质

数组指针 : 主语是指针,它的本质是指针

指针数组:主语是数组,它的本质是数组

函数指针:主语是指针,它的本质是指针

指针函数:主语是函数,它的本质是函数

   2)*外有括号才是指针

          int (*p)[m];

int *p[m];

因为 * 优先级低于 [],所以只有 * 外有 () , p才能先与 *结合,p才是一个指针。* 外没有 ()时,p先与 [] 结合,p就是一个数组。

int (*p)(int i,int j);

int *p(int i,int j);

因为 * 优先级低于 (), * 外有 (), p才能先与 *结合,p才是一个指针。* 外没有 ()时,p先与(int i,int j) 结合,p就是一个函数。


注:函数指针还可以再举例子加以说明,以后再补。

猜你喜欢

转载自blog.csdn.net/weixin_42048417/article/details/80172637
今日推荐