美文网首页
指针数组 & 数组指针 & 函数指针

指针数组 & 数组指针 & 函数指针

作者: Kylin824 | 来源:发表于2018-03-19 18:27 被阅读0次

一、指针数组 & 数组指针

普通数组:

char a[5] = {"a","b","c","d","e"};
等价于
char (*p)[5] = {"a","b","c","d","e"};

a[0] == a的值 == (*p)[0];
a[1] == b的值 == (*p)[1];
...

即数组名a与(*p)等价,都代表数组的首地址,此为数组指针

指针数组:

char *a[5] = {"a","b","c","d","e"};

a[0] == a字符所在的地址值
a[1] == b字符所在的地址值
...

代表数组的5个元素都为char *指针类型,数组元素的值为指针类型,占4或8个字节,此为指针数组

二、函数指针

C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址

函数指针是指向函数的指针变量,指针变量的值即为函数入口地址

有了指向函数的指针变量后,可用该指针变量调用函数

函数指针有两个用途:调用函数作为函数的参数

1.函数调用

  • 常规方法:

      int func(int x);     //声明一个函数:形参为int 返回值类型为int
    
    
      int (*fun_ptr)(int); //声明一个函数指针,指针名为fun_ptr
    
      fun_ptr = func;      //将func函数的首地址赋给指针
    
      fun_ptr(3);          //通过函数指针调用该函数
    
  • typedef方法:

      int func(int x);            //声明一个函数:形参为int 返回值类型为int
    
    
      typedef int (*PTRFUN)(int); //将参数为int 返回int值指针类型取别名为PTRFUN
    
      PTRFUN ptr_fun;             //声明一个函数指针,指针名为ptr_fun
    
      ptr_fun = func;             //同样将func函数的首地址赋给指针
    
      ptr_fun(3);              //通过函数指针调用该函数
    

2.作为函数参数,效果类似 多态

    void MyFun1(int x) //函数1
    {
       printf(“函数MyFun1中输出:%d\n”,x);
    }
    void MyFun2(int x) //函数2
    {
       printf(“函数MyFun2中输出:%d\n”,x);
    }
    void MyFun3(int x) //函数3
    {
       printf(“函数MyFun3中输出:%d\n”,x);
    }

        typedef void (*FunType)(int); //定义一个函数指针类型FunType,与②函数类型一致

        //关键!!以函数指针作为参数传入
        void CallMyFun(FunType fp,int x) 
        {
          fp(x); //通过fp的指针执行传递进来的函数
        }

        //不使用typedef版
        void CallMyFun(void (*fp)(int),int x) 
        {
          fp(x); //通过fp的指针执行传递进来的函数
        }

    int main(int argc, char* argv[])
    {
       CallMyFun(MyFun1,10);  
       CallMyFun(MyFun2,20); //通过CallMyFun函数分别调用三个不同的函数,实现多态
       CallMyFun(MyFun3,30);   
    }

相关文章

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

  • 混淆知识点

    1、指针数组&数组指针、常量指针&指针常量、函数指针&指针函数 数组指针&指针数组 数组指针的定义 int (*p...

  • C语言

    C 指针、指针变量、函数指针、指针函数、指针数组、数组指针、C 数组

  • C语言-2、数组、函数

    数组定义 数组的指针、内存地址、取值 数组大小 函数指针 函数指针2 函数指针3

  • C:函数指针的坑

    关于该死的函数指针和指针函数 先来个目录 常量指针、指针常量 数组指针、指针数组 函数指针、指针函数 1、先看第一...

  • 数组指针/指针数组/函数指针/函数指针数组

    原文地址: 浅谈 数组指针 指针数组 函数指针 函数指针数组... 以及它们之间区别。 首先,先说明一个关系:数组...

  • 指针

    指针 数组指针和指针数组 函数指针和指针函数 指针作为参数 指针多用于处理值传递,减少值复制耗费的内存

  • 指针

    普通指针指针的指针 数组指针 函数指针

  • 数组和指针

    数组初始化 函数,数组,指针 使用指针形参 指针操作 通过指针改变数组内容

  • 数组指针 指针数组 函数指针 指针函数

    指针数组:int *P[10] 首先p先和[]结合(因为[]的优先级高于*),首先它是一个数组,然后才是指针,所以...

网友评论

      本文标题:指针数组 & 数组指针 & 函数指针

      本文链接:https://www.haomeiwen.com/subject/hsgpqftx.html