zoukankan      html  css  js  c++  java
  • 复杂指针的定义(含复杂函数指针)

    转摘自:https://blog.csdn.net/chenguanchi/article/details/15336859

    指针是C/C++语言中很重要的机制,一些C语言高级用法基本都需要指针的参与。

    一些复杂指针可能理解起来有点难度,但只要你掌握相应的技巧,这一切都能迎刃而解。

    本文从定义的角度,解析复杂指针。

    具体解析过程

    int   p;

    定义普通变量p
    int   *p;

    定义一个指向int变量的指针p
    int   p[3];

    定义一个含有三个元素的数组p

    int   *p[3];

    []优先级比*高,因此p先与[]结合,说明p首先是个数组,

    然后再与*结合,说明数组中的元素是指针,

    然后再与int结合,说明该指针指向的类型是int。


    int   (*p)[3];

    ()的优先级最高,因此p先与*结合,说明p首先是个指针,

    然后再与[]结合,说明指针指向的内容是数组,

    然后在与int结合,说明数组中的元素为int。


    int   **p;

    p与最近的*结合,说明p首先是个指针A,

    然后再与*结合,说明该指针指向的内容也是一个指针B,

    然后再与int结合,说明指针B指向的内容为变量int。


    int   p(int);

    p与()结合,说明p首先是个函数,

    然后再与int结合,说明函数的返回值是int变量。


    int   (*p)(int);

    ()的优先级最高,因此p先与*结合,说明p首先是个指针,

    然后再与()结合,说明该指针指向的内容是函数,

    再与括号里面的int结合,说明该函数的参数有一个int,

    再与前面的int结合,说明该函数的返回值为int。


    int   *(*p(int))[3];

    ()的优先级最高,因此p先与()结合,说明p首先是个函数,

    再与括号内的int结合,说明函数的参数为一个int,

    再与p前面的*结合,说明函数的返回值为一个指针A,

    再与后面的[]结合,说明该指针A指向的内容是一个数组,

    再与第一个*结合,说明数组里面的元素是指针B,

    再与前面的int结合,说明指针B指向的内容是一个int。

    int   (*(*p)(int))(int);

    ()的优先级最高,因此p先与*结合,说明p首先是个指针A,

    再与后面()结合,说明该指针A指向的内容是一个函数A,

    再与括号中的int结合,说明该函数的参数是一个int,

    再与(*p)前面的*结合,说明该函数的返回值是一个指针B,

    再与最后面的()结合,说明该指针B指向的内容提要是一个函数B,

    再与括号中的int结合,说明该函数B的参数是一个int,

    再与前面的int结合,说明函数B的返回值为int。

  • 相关阅读:
    织梦栏目判断 seotitle的小bug
    Python正课32 —— 函数参数的补充
    Python正课31 —— 函数参数的使用
    Python正课30 —— 函数的基本使用
    Python正课29 —— 文件修改
    Python正课28 —— f.seek的应用
    Python正课27 —— 文件高级操作:指针的移动
    Python正课26 —— 文件处理的补充
    javascript 中的时间戳转换时间 根据时间字符判断星期几 根据开始时间结束时间获取中间间隔时间 来自转发
    js获取url参数值的两种方式
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007465.html
Copyright © 2011-2022 走看看