• 指向函数的指针与指向指针的指针


    1、指向函数的指针

    可以用指针变量指向整型变量、字符串、数组,也可以指向一个函数。一个函数在编译时被分配给一个入口地址。这个函数中的入口地址就称为函数的指针。

    例:比较a和b的大小,求大值。

    #include<stdio.h>
    #include "StdAfx.h"
    int max(int x,int y)
    {
        int z;
        if(x>y)
        {
            z=x;
        }
        else
        {
            z=y;
        }
        return z;
    }
    void main()
    {
        int max(int,int);
        int (*p)(int,int);
        int a,b,c;
        p = max;
        scanf("%d%d",&a,&b);
        c=(*p)(a,b);
        printf("a=%d,b=%d,max=%d",a,b,c);
    
    }

    用指向函数的指针作函数参数

    函数指针变量常用的用途之一是指针作为参数传递到其他函数,以实现函数地址的传递,这样就能在被调用的函数中使用实参函数。

    例:

    #include<stdio.h>
    #include "StdAfx.h"
    
    void sub(int(*x1)(int),int(*x2)(int,int))/**x1与*x2分别为两个函数f1,f2的地址*/
    {
        int a,b,i,j;
        a=(*x1)(i);    /*调用f1函数*/
        b=(*x2)(i,j);/*调用f2函数*/
        ……
    }

    返回指针值的函数

    一般形式为*函数名 (参数表列);

    例:有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号后,能输出该学生的全部成绩,用指针函数实现。

    #include<stdio.h>
    #include "StdAfx.h"
    
    void main()
    {
        double score[][4]={{65,45,12,78},{45,45,88,65},{65,78,98,46},{78,45,96,93}};
        double *search(double(*pointer)[4],int n);
        double *p;
        int i,n;
        scanf("%d",&n);
        printf("The scores of No.%d are:
    ",n);
        p=search(score,n);
        for(i=0;i<4;i++)
        {
            printf("%5f	",*(p+i));
        }
        printf("
    ");
    }
    double *search(double(*pointer)[4],int n)
    {
        double *pt;
        pt=*(pointer+n);
        return pt;
    }

    指针函数与函数指针的区别:

    指针函数时指带指针的函数,即本质是一个函数。

    函数指针是指函数的指针变量,因而函数指针本身首先应是指针变量,该指针变量指向函数。

    指针数组和指向指针的指针

    指针数组:一个数组,若元素均为指针类型数据,称为指针数组。

    一维指针数组定义形式:类型名 *数组名[数组长度];

    例:int *name[4];

    例:

    #include<stdio.h>
    #include "StdAfx.h"
    
    void main()
    {
        int a[5]={1,2,3,4,5};
        int *name[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
        int i;
        for(i=0;i<5;i++)
        {
            printf("%d",*name[i]);
    
        }
    }

    指向指针的指针

    形式:char **p;

    说明:p前面有两个‘*‘号,*运算符的结合性是从右到左,因此**p相当于*(*p),显然*p是指针变量的定义形式。

    例:

    #include<stdio.h>
    #include "StdAfx.h"
    
    void main()
    {
        char *name[]={"I love China","NIT","I love you"};
        char **p;
        int i;
        for(i=0;i<3;i++)
        {
            p=name+i;
            printf("%s
    ",*p);
        }
    }
  • 相关阅读:
    关于sizeof,对空指针sizeof(*p)可以吗?
    Mysql之锁(一)
    Mysql之事务
    Mysql之Explain关键字及常见的优化手段
    Mysql查询优化器之关于子查询的优化
    Mysql查询优化器之关于JOIN的优化
    Mysql查询优化器之基本优化
    Mysql之B+树索引实战
    Mysql之索引
    Mysql之InnoDB行格式、数据页结构
  • 原文地址:https://www.cnblogs.com/lvfengkun/p/10366993.html
Copyright © 2020-2023  润新知