`

分析C语言声明的通用方法(经典——来自C专家编程)

阅读更多
C语言由于其形式的灵活、符号的复用以及优先级的复杂性导致了某些声明晦涩难懂。比如下面两种声明:
char *const *(next) ();
char *(*c[10]) (int **p);

对于不仅是初学者来说都不是简单的问题。那么我们应该如何来解析这种声明呢?
在《C专家编程》的Page65给出了一个较为通用的方法,细细体会,受益匪浅。
方法如下:
步骤1.取最左边的标识符(比如变量的标识符)          表示标识符是
步骤2.查看标识符右边的下一个符号,如果是方括号    对于每一对,表示“……的数组”
步骤3.如果是一个左括号                                        与右括号组成函数参数的放置,确定这是一个返回……的函数
步骤4.查看标识符左边的符号,如果是左括号             这个括号把已经处理的声明组合在一起,知道遇见对应的右括号,然后从第2步开始
步骤5.如果左边符号是下述之一
const
volatile
*                                                                        继续向左边读符号,知道所读不是这三者之一(const表示只读,volatile表示“volatile”,*表示指向……的指针)。然后重复第4步
步骤6.剩下的符号形成声明的基本类型                       一并读取,如static unsigned int

=======================================
备注:上述方法有回返处理的过程。读起来比较难懂一点。不果根据我的个人经验,大家可以记住两点;1.首先找出最左边的那个标识符——变量最常见。2.读取完标识符首先查看标识符的右边,如果有圆括弧则为函数,为[]是数组,然后再看左边的符号。
再简练点就是:最左边标识符,其右、其左。
=======================================
解析上述声明:
char *const *(*next) ();

找到最左边的标识符next,看其右,非()或[]而是);看其左,为*,说明next是一个指针变量。再看其左,为(,那么再看其右,(),函数。这个指针变量指向一个函数。看其右, *,说明这个函数返回一个指针,这个指针指向一个char的常量指针(char *const)。
char *(*c[10]) (int **p);

利用现有的经验来得更简单和快捷:
这是一个数组c[10],这个数组为指针类型(每个元素都是一个指针变量),每个指针变量指向一个参数为int **p,返回值为char *的函数。
0
0
分享到:
评论

相关推荐

    通用单纯形——大M法程序

    单纯形大M法求解最优化方法程序。简单适用!

    Turbo C高级程序员编程指南

    Turbo C 获得了迅速的成功和老资格及初学者程序员的接受,本书是以所有级别的C程序为目的,本书讨论了与经常遇到的编程的各方面的相关话题,如控制台I/O、鼠标器管理、弹出窗口、串、动态变量、通用编程、高级图形...

    你必须知道的495个C语言问题.pdf

    Steve Summit,著名的C语言专家。Usenet C FAQ的创始人和维护者,有近30年的C编程经验。毕业于麻省理工学院。他曾在华盛顿大学教授C语言课程多年。除本书外,他还与人合著了C Unleashed一书。 编辑推荐 全球C语言...

    明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】

    《明解C语言 第3版 入门篇》是日本的C语言经典教材,自出版以来不断重印、修订,被誉为“C语言圣经”。 《明解C语言 第3版 入门篇》图文并茂,示例丰富,第3版从190段代码和164幅图表增加到205段代码和220幅图表,对...

    c语言课程设计-职工信息管理系统方案.doc

    XXXXXXX大 学 课程设计说明书 名称 计算机语言C课程设计 —— 职工信息管理系统设计 2011 年 6月20 日至 2011年6 月26 日 共1 周 院 系 . 班 级 . 姓 名 . 学 号 . 系 主 任 . 教研室主任 . 指导教师 . 目 录 一、...

    GO语言编程pdf格式高清无水印

    这一定位暗示了Go语言希望取代C和Java的地位,成为最流行的通用开发语言。 Go希望成为互联网时代的C语言。多数系统级语言(包括Java和C#)的根本编程哲学来源于 —————————— ① 数据来源:...

    用于 Raspberry Pi Pico微控制器的 Lua 编程环境_C语言_代码_相关文件_下载

    支持通用数字输入/输出、模拟输入、PWM 输出和 I2C。 picolua与 Pico 上的 MicroPython 在概念上有一些相似之处。但是,picolua它被设计为完全独立的,因为创建、编辑和测试程序不需要其他工具(终端除外)。可以...

    嵌入式Linux C编程入门(第2版) PPT

    2.1.3 嵌入式linux c语言编程环境 34 2.2 嵌入式linux编辑器vi的使用 35 2.2.1 vi的基本模式 35 2.2.2 vi的基本操作 36 2.2.3 vi的使用实例分析 40 2.3 嵌入式linux编译器gcc的使用 41 2.3.1 gcc...

    C程序设计(第四版)——高清PDF

    《C程序设计》是中国高等教育计算机专业和非计算机专业编程课程的通用教材,他前后由若干作者和若干出版社出版了不同版本的教材。 本书由谭浩强主编,被大多数高校用作C语言学习的教材,更正了第三版中的不足。

    DSP编程规范

    TI公司发布的一套DSP算法标准——TMS320 DSP Algorithm Standard,其中规范了DSP算法软件的开发,并提供了类似C++语言类的封装方式的算法接口,使得算法集成变得简单统一,为DSP的编程人员提供一套通用方案。

    二十四节气计算——fortran与C混编

    编程语言为C预言与Fortran的混编(基本都是C语言写的,就调用了一个读取DE/LE历表的Fortran静态库)。 嫌CSDN太黑的同学可以到我的GitHub下载,网址为:https://github.com/xunhou0222/24SolarTerms_C_F

    手把手教你学AVR单片机C程序设计(光盘)

    2.7 通用型多功能USB编程器 第3章 AvR单片机开发软件的安装及第一个入门程序 3.1 安装IAR for AVR 4.30集成开发环境 3.2 安装AVR Studio集成开发环境 3.3 安装PonyProg2000下载软件 3.4 安装SLISP下载软件 ...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     李文娟,中国石油大学(华东)硕士,现供职于国家行政学院,工作后一直从事软件开发和软件项目管理工作,对计算机语言、计算机体系结构、操作系统都非常熟悉,尤其是精通C和C++编程技术. 目录 封面 -19 封底 -18 扉页...

    用C语言来实现一个简单的虚拟机

    一个C编译器——我使用了 clang 3.4,也可以用其它支持 c99/c11 的编译器; 文本编辑器——我建议使用基于IDE的文本编辑器,我使用 Emacs; 基础编程知识——最基本的变量,流程控制,函数,数据结构等; Make ...

    揭秘数据解密的关键技术

    2.2 汇编中的字符串——C语言中的字符串 2.2.1 字符串的定义 2.2.2 字符串的实现机制 2.3 汇编中的数组——C语言中的数组 2.3.1 数组的定义 2.3.2 数组的实现机制 2.3.3 二维数组的实现机制 2.4 汇编中的结构体——...

    编程新手真言......

    ———— A Programming Introduction For Beginners By Minlearn @ http://www.actyou.com.cn/ 设计才是真正的编程! 对类型的设计才是设计! 面向对象并非一切? 无论你以为上述观点是惊天大秘或不过尔尔,你...

    C++ Primer Plus(第五版)习题解答和例题代码

    以极大的灵活性实际使用通用C++——不要求读者使用特定的计算机、操作系统或编译器;以ISO/ANSI标准为基础,对模板、标准模板库、字符串类、异常、RTTI和名称空间进行了讨论。想掌握C++就选这本书吧!绝对是进入C++...

    C++精华资料全集——云盘链接

    Dlib:使用契约式编程和现代C++科技设计的通用的跨平台的C++库。 EASTL :EA-STL公共部分。 ffead-cpp :企业应用程序开发框架。 Folly:由Facebook开发和使用的开源C++库。 JUCE :包罗万象的C++类库,用于开发跨...

    C语言程序设计标准教程

    为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。 它相当于其它高级语言中的记录。  “结构”是一种构造类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造...

    opencv3编程入门书籍

    它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然...

Global site tag (gtag.js) - Google Analytics