zoukankan      html  css  js  c++  java
  • 娓娓道来c指针 (4)解析c的声明语句

                             (4)解析c的声明语句

    在继续探索c指针之前。有必要来解析下c语言中复杂的声明语法。

    仅仅须要记住两则:一个原则,一个规则。

    原则:先看标示符。

    规则:运算符优先级是规则。


    举例说明

    1.最简单的 int array[3];

    结论:array是数组。数组规模是3。元素类型是int。

    解析过程:先看标示符:array。仅仅有一个运算符[],那么array就是数组,元素类型是int,完了。


    2.难一点的

    (1)数组指针 int(*array)[3];

    结论:array是一指针,指向一数组,数组规模是3,数组中元素类型int。

    解析过程:先看标示符:array,因为使用了括号运算符。仅仅能先解析(*array):说明array是一指针。解析完了的,就可抛弃。那么仅仅剩下[]。说明指针指向的是一数组,剩下的不解释了。

    (2)指针数组 int *array[3];

    结论:array是一数组,数组规模是3,数组中元素类型是int*。

    解析过程:先看标示符:array,因为[]优先级高于*,故array先与[]结合:说明array是一数组。仅仅剩下一个*,说明数组中存放的是指针,指针指向的类型是int。也就是说数组中存放的元素类型是int*。

    看来仅仅差一个(),意义全然不同。

    数组指针和指针数组的内存示意图:


    指针数组、数组指针总结

    指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。

    它是储存指针的数组的简称。
    数组指针:首先它是一个指针。它指向一个数组。

    32位系统下永远是占4个字节,至于它指向的数组占多少字节,不知道。它是指向数组的指针的简称。


    3.再复杂一点的

    函数指针 int (*pfun)(int,int);

    结论:pfun是一函数指针,即pfun指向一个函数,该函数有两个參数,參数类型是int、int,而且函数的返回值的类型是int。

    解析过程:先看标示符:pfun,因为使用了括号运算符。仅仅能先解析(*pfun):说明pfun是一指针。

    现仅仅剩下(int,int)。进一步说明pfun指向的是一函数,该函数有两參数。类型都是int。最后的int,说明函数的返回值类型是int。


    4.更加复杂一点

    int *(*pfun[3])(int, void (*)(int, int*));

    是否有眼花缭乱的感觉,运用上面的方法,你会解析出来的。最好还是写在评论中,大家比較看看。


    关于typedef

    typedef的作用是为一个已有的类型取一个新的名字:定义别名。

    如,在数据结构与算法系列常常看到

    typedef int ElemType;

    于是,在能够使用int的地方。也可使用ElemType替代。如语句 ElemType data;相同表达着int data;的含义。

    typedef更重要的用处是简化类型名。如

    typedef struct node

    {

        int data;

        struct node* lchild;

        struct node* rchild;

    }Node, *PNode;

    这里使用typedef定义了多个别名,自此,能够直接使用Node声明一个结构体类型,使用PNode声明一个指向该结构体类型的指针。结构体类型的成员组成如上所看到的。

    除此之外,typedef也经常使用于复杂的声明,如

    typedef int(*p)(int, char);

    解析这样的声明的方法是。全然依照上述所讲的c的声明方法解析就可以。此处p就是函数指针。该函数原型是int (int, char);

    再如。typedef int F(void);

    此时,F是函数类型。该函数參数为空。返回int。

    故,声明 F f;就是声明了int f(void);


    专栏文件夹:


  • 相关阅读:
    118/119. Pascal's Triangle/II
    160. Intersection of Two Linked Lists
    168. Excel Sheet Column Title
    167. Two Sum II
    172. Factorial Trailing Zeroes
    169. Majority Element
    189. Rotate Array
    202. Happy Number
    204. Count Primes
    MVC之Model元数据
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6770208.html
Copyright © 2011-2022 走看看