指针函数和函数指针

1.指针函数
指针函数是一个函数,函数的返回值是一个指针。
格式如下:

类型标识符 *函数名(参数表)
如 double *myfunc(double x,double y);

myfunc即为一个指针函数。

代码示例如下:
pfunc.c

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

输出结果:

2.函数指针
函数指针是一个指针,它指向函数地址
格式如下:

类型标识符 (*指针名)(参数表)
如 double (*myfuncp)(double x,double y);

myfuncp是一个指针,*myfuncp为指针指向的函数的地址。

我们有以下函数
double myfunc(double x,double y);
则可将函数的地址赋给指针
myfuncp = &myfunc或myfuncp=myfunc(取地址运算符不是必需的)

代码示例如下:
funcp.c

复制代码
#include<stdio.h>
double (*myfuncp)(double x,double y);
double myfunc(double x,double y);
int main()
{
    myfuncp = &myfunc;
    double result = (*myfunc)(2.5,4.3);
    printf("%f\n",result);
    return 0;
}
double myfunc(double x,double y)
{
    return x+y;
}
复制代码

输出结果:

3.指针的指针
表示指针指向的值,是一个指针类型
如 int i=5;
int *p = &i;
int **pp = &p;
其中pp即为一个指向指针的指针。
可以用以下示意图来标识。

再看下面的图

若*pp=p2;会发生什么?*pp即p=p2,那么p将指向p2所指的地方,即p指向j。
如下图所示:

4.指针的指针的作用
1)调用函数修改局部指针变量
2)处理指针数组

代码示例如下:
从一个int类型数组中,找出第一个负数。
pptest2.c

复制代码
#include<stdio.h>
int main()
{
    int vals[]={7,6,5,-4,3,2,1,0};
    int *p=vals;
    getnegative(&p);
    printf("%d\n",*p);
    return 0;
}
void getnegative(int **pp)
{
    while(**pp!=0)
    {
        if(**pp<0)
            break;
        else
            (*pp)++;
    }
}
复制代码

输出结果:

我们可以用指针数组来代替多维数组,
代码示例如下:
arrayp.c

复制代码
#include<stdio.h>
int main()
{
        char* names[]={"Bill","Sam","Jim","Paul","Jack","0"};
        char **namesp = names;
        while(*namesp!="0")
        {
                printf("%s ",*namesp++);
        }
        return 0;
}
复制代码

输出结果:

其中*namesp++表示先取得指针指向的内容,然后使指针自增。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI改变我的未来

不多不少5C币是你我沟通的桥梁

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值