• 指针函数和函数指针的区别


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

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

    myfunc即为一个指针函数。

    代码示例如下:
    pfunc.c

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

    输出结果:

    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
    ",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
    ",*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++表示先取得指针指向的内容,然后使指针自增。

  • 相关阅读:
    1002. 查找常用字符『简单』
    1108. IP 地址无效化『简单』
    1137. 第 N 个泰波那契数『简单』
    1154. 一年中的第几天『简单』
    1185. 一周中的第几天『简单』
    1207. 独一无二的出现次数『简单』
    暑期集训模拟赛3
    暑期集训模拟赛2
    暑期集训模拟赛1
    CF526F Pudding Monsters 【分治】
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/5652018.html
Copyright © 2020-2023  润新知