• 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型数组。

  • 相关阅读:
    J2ME 游戏开发之GameCanvas的使用
    J2ME游戏开发之字符串的绘制
    JS数组操作
    什么是LBS?地理位置服务
    js中的this怎么理解
    相机参数
    boost 移植到ARM EP9315
    armlinuxgcc 安装和配置
    小算法 : 水仙花数
    C语言标准库 文件操作
  • 原文地址:https://www.cnblogs.com/jingd/p/2989628.html
Copyright © 2020-2023  润新知