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就是一个函数。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值