• 指针理解——复杂指针解析


    右左法则

    首先从最里面的圆括号看起,然后往右看,再往左看,每当遇到圆括号时,就应该调转阅读方向,一旦解析完圆括号里面的所有东西,就跳出圆括号,重复这个过程直到整个声明解析完毕。

    举例:int * (* (*fun) (int *)) [10]

    首先,fun是一个指针,因为他先跟*(绿色色)结合。fun指向的是一个函数,该函数特点是有一个整形指针做参数,并且返回值仍然是一个指针(品红色)。其返回值指针指向的内容是个数组。所指向的数组有10个元素,每个元素都是int *类型。

    练习:

    用变量a给出下面的定义
    a)一个整型数
      int a;

    b)一个指向整型数的指针
      int*a

    c)一个指向指针的指针,它指向的指针是指向一个整型数

      int**a

    d)一个有10个整型数的数组
      int a[l0]
    e)一个有10个指针的数组,该指针是指向一个整型数的。
      int *a[l0]
    f)一个指向有10个整型数数组的指针

      int(*a)[l0]
    g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数

      int(*a)(int)
    h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

      int(*a[l0])(int)

    最后一个例子

    (*(void(*)())0)()

    假如有代码void(*pfun)()  我们很容易知道这是个函数指针。那么该函数指针的类型是void(*)()

    接下来把0强制胡转换成void(*)()这种类型,就是(void(*pfun)())0去掉pfun,变成(void(*)())0。本来就是一个普通数字0,现在被强制转换成函数指针,摇身一变成某个函数的地址。

    假如有代码void(*pfun)() ,pfun是个函数指针。取得该指针所指向的函数就能调用函数,即(*pfun)()

    同理(void(*)())0这个函数指针,*取该指针指向的函数*((void(*)())0),但是要调用指向的函数,还要再阔上()。即(*(void(*)())0)()

  • 相关阅读:
    隐马尔科夫模型
    cmake modules default path
    opencv mat
    cmake 查找头文件和库文件顺序
    opencv3.0 legacy和nonfree丢失
    qt include_directories没用
    ros中删除某个包之后用apt安装的包找不到
    sql-select
    关于ros stage与navigation仿真总结5月16号
    关系型数据库
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9351499.html
Copyright © 2020-2023  润新知