zoukankan      html  css  js  c++  java
  • 指针与数组,指针与函数之间的关系

    指针数组和数组指针

    指针数组,它的关键在于是一个数组,即数组中每个元素都是指针。
    数组指针,他的关键在于是指针变量,即这个指针指向一个数组。

    #include<stdio.h>
    int main ()
    {
        int arr [4] = {0};//这是一个数组,大家都知道。
        int *parr1[4];//这是指针数组,首先[]的优先级比*的优先级高,所以parr
                     //先与[]结合,它是一个数组,然后再与*结合,即数组中的
                     //每个元素都是指针。
        int (*parr2)[4];//这是数组指针,因为()的优先级比[]的高
                        //所以parr是一个指针变量,然后与[]结合
                        //所以,这是数组指针。              
        int *(*parr3)[4];//较为复杂一点的数组指针,首先parr3是一个指针变量,
                         //然后与[]结合,变为数组指针,而前面又有*,所以它可以指
                         //向一个大小为3个元素的数组,每个元素是指针。   
    }

    函数指针

    函数指针就是函数的指针,他是一个指针,指向一个函数。

    #include <stdio.h>
    #include <string.h>
    char* fun (char *p1,char *p2)
    {
        int tmp = 0;
        tmp = strcmp(p1,p2);
        if (tmp==0)
        {
            return p1;
        }
        else 
        {
            return p2;
        }
    
        }
    int main ()
    {
        char *(*pfun)(char *p1,char *p2);
        pfun = &fun;
        (*pfun)("aa","bb");
        return 0;}//这个例子就很好的解释了函数指针这个定义。我们清楚表达式
                  //"char*(*pfun)(char*p)"定义的是一个函数指针pfun。
                  //首先通过(*pfun)取出存在这个地址上的函数,然后调用。

    函数指针的数组

    函数指针的数组,它是一个数组,数组中的每个元素是一个函数指针,这个指针可以指向一个函数。

    #include <stdio.h>
    #include <string.h>
    char *fun1(char*p)
    {
        printf ("%s
    ",p);
        return p;
    }
    char *fun2 (char *p)
    {
        printf ("%s
    ",p);
        return p;
    }
    char *fun3 (char*p)
    {
        printf ("%s
    ",p);
        return p;
    }
    int main ()
    {
        char *(*pfun[4])(char *p)//这里的表达式表示的就是函数指针的数组
        pfun[1] = fun1;//可以直接用函数名表示地址
        pfun[2] = &fun2;//也可以在函数名前加取地址符号。
        pfun[3] = &fun3;
    
    }

    函数指针数组的指针

    它指的还是一个指针,只不过这个指针指向一个数组,这个数组里的元素是可以指向函数的指针,有点绕。

    void (*(*pfun)[3])(char *)//首先pfun是一个指针变量,然后指向一个数组,这个
                             //数组有三个元素,这几个元素可以指向函数的指针,函数
                             //的参数是char *,返回值为 void

  • 相关阅读:
    VS快捷键
    IIS部署WCF
    WLAN的优点
    局域网与WAN比较
    局域网拓扑结构
    局域网协议
    局域网介绍
    wifi主要特性
    wifi发展前景
    Wi-Fi与WAPI主要区别
  • 原文地址:https://www.cnblogs.com/chan0311/p/9427372.html
Copyright © 2011-2022 走看看