zoukankan      html  css  js  c++  java
  • c语言复杂变量声明(数组、指针、函数)

    最近重新研读了c语言指针方面的资料,现在对c语言中复杂声明进行总结。

    这里指的复杂声明指的是解读像下面这种声明代码含义的。

    int (*(*x)(int *,char *))(int);

    (以上代码声明了一个函数指针,这个函数接收一个整型指针和一个字符指针作为参数,函数指针,这个函数接收一个整型参数,返回一个整型。)

    c语言变量的声明始终贯彻两点:

    1.声明和使用的语法尽量保持一致

    例如:声明一个函数指针

    double (*fun)(double);

    使用这个函数指针

    #include <math.h>
    fun=sin;
    doube reslut=(*fun)(0.5);//use point fun

    2.声明语句不是的阅读不是按照从左往右的阅读顺序,而是要根据各个符号的优先级进行阅读的

    这一点非常重要,是判断一个声明到底是声明了一个什么变量的准则。具体讲有三类声明符:

    *   ()   [ ]

    其中“*”声明指针,各种各样的指针,包括函数指针;

    “()”是专门用来声明函数指针的;

    “[ ]”是用来声明数组的。

    三个运算符“[ ]”和“()”的优先级别最高,结合律是“自右向左”。

    明确了这两点后,我们就可以使用这两点来解读复杂声明了。

    具体规则:首先从声明的变量符开始根据优先级进行阅读,判断定申明了一个什么变量。然后一层一层逐级向外拆开。*则申明了指针;[ ]则申明了数组;()则申明了函数。

    例如解读本文一开始的例子:

    int (*(*x)(int *,char *))(int);

    首先找到x,然后根据优先级找到*x,则证明整条语句声明了一个指针。再继续看到(*x)右边是一个()符,则证明x是一个指向函数的指针,既然是函数指针那剩下的部分就是描述函数返回值类型和参数类型;再看()里则可以解读出函数的输入是一个整型指针和一个字符指针。然后再以“(*x)(int *,char *)”为整体看,找到优先级最高的是*符号,则证明返回值是一个指针;再继续看找到了(int)则证明这个指针是指向一个函数的,函数的参数是整型;再继续找到最后一个int,则看出这个函数的返回值是一个整型。到此解读完毕。

    简要的说就是:声明了一个函数指针,这个函数接收一个整型指针和一个字符指针作为参数,返回函数指针,这个函数指针指向的函数接收一个整型参数,返回一个整型。

    double(*(*y[3])())[10]

    同理:这里又声明了一个长度为3的数组,数组元素为函数指针,指向的函数返回一个指针,该指针又指向仪个长度为10的double型数组。

  • 相关阅读:
    poj 1113 Wall 凸包的应用
    NYOJ 78 圈水池 (入门级凸包)
    Monotone Chain Convex Hull(单调链凸包)
    poj Sudoku(数独) DFS
    poj 3009 Curling 2.0(dfs)
    poj 3083 Children of the Candy Corn
    Python join()方法
    通过FISH和下一代测序检测肺腺癌ALK基因融合比较
    华大病原微生物检测
    NGS检测ALK融合大起底--转载
  • 原文地址:https://www.cnblogs.com/jingd/p/2989628.html
Copyright © 2011-2022 走看看