`

分析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
分享到:
评论

相关推荐

    单片机c语言程序设计100例——基于8051+protues仿真

    这个压缩包文件名为"单片机C语言程序设计实训100例——基于8051+Proteus仿真",提供了100个实例,旨在帮助初学者深入理解和掌握8051单片机的C语言编程。 C语言是一种通用的、面向过程的编程语言,因其简洁明了的...

    [嵌入式必读]—关于C的“四书五经”之——C语言嵌入式系统编程修炼

    ### C语言嵌入式系统编程修炼——背景篇 #### 嵌入式系统编程的独特性 嵌入式系统编程与普通软件开发有着本质的区别,它依赖于特定的硬件平台,要求编程语言能够直接操作硬件。尽管汇编语言能够满足这一需求,但因...

    DSP的C语言编程(超级经典)

    ### DSP的C语言编程——深度解析与应用 #### 1. DSP C语言编程的重要性与优势 数字信号处理器(Digital Signal Processor,简称DSP)是一种专门设计用于处理数字信号的微处理器,广泛应用于通信、音频处理、图像...

    二十一天学通C语言——手把手教你学编程

    《二十一天学通C语言——手把手教你学编程》是一本专为初学者设计的C语言教程,旨在通过系统的学习和实践,使读者在短时间内掌握C语言的基础与核心概念。C语言是一种强大的、通用的、面向过程的编程语言,被广泛应用...

    C语言进阶——嵌入式系统高级C语言编程.rar

    《C语言进阶——嵌入式系统高级C语言编程》是一本专为C语言爱好者和嵌入式系统开发者设计的教程。它由东大教授凌明编写,深受读者好评,被认为是一份非常不错的学习资源。这份压缩包包含了作者对C语言深入理解的精华...

    C语言程序设计课程设计——某科学的成绩管理系统.rar

    C语言是一种底层、通用的编程语言,因其高效性和灵活性,常被用于系统级编程和开发各种应用程序,包括管理系统的实现。以下是对这个成绩管理系统相关知识点的详细阐述: 1. C语言基础: C语言是计算机科学的基础,...

    《单片机C语言程序设计实训100例——基于8051+Proteus仿真》案例压缩包

    《单片机C语言程序设计实训100例——基于8051+Proteus仿真》案例压缩包,这是一份专为学习单片机C语言编程的实践教程,涵盖了丰富的实例,旨在帮助初学者深入理解单片机的工作原理和编程技巧。8051单片机是经典且...

    C语言进阶——嵌入式系统C高级语言编程

    在深入探讨“C语言进阶——嵌入式系统C高级语言编程”这一主题时,我们需要了解C语言在嵌入式系统中的应用以及它所涉及的关键概念。C语言因其高效、灵活和可移植性,成为嵌入式开发领域的首选语言。东南大学国家专用...

    C语言学习笔记——基础知识篇

    C语言是一种强大的、通用的编程语言,被广泛用于系统编程、软件开发、设备驱动和嵌入式系统等各个领域。它的简洁性和灵活性使得C语言成为许多程序员的首选。本资源包"**C语言学习笔记——基础知识篇**"是为C语言初学...

    C语言与MATLAB接口 编程与实例 李传军 编著 PDF

    MATLAB是一种强大的数学计算软件,广泛应用于工程计算、数据分析和科学可视化等领域,而C语言则是一种通用的、低级别的编程语言,适用于系统开发、嵌入式系统以及性能要求高的应用。将C语言与MATLAB接口结合起来,...

    C语言资料大全——好资料

    5. **标准库**: C语言提供了丰富的标准库,如stdio.h(输入/输出)、stdlib.h(通用实用功能)、math.h(数学函数)等,这些都是编写C程序时不可或缺的工具。 6. **错误处理与调试**: 学习如何识别和处理运行时错误...

    项目导向——C语言嵌入式应用编程.zip

    在“项目导向——C语言嵌入式应用编程.zip”这个压缩包中,我们可以发现一系列与C语言在嵌入式系统中的应用相关的教学资源。这些资源包括PPT演示文稿,涵盖了项目的介绍、预备知识以及具体项目的实施。让我们逐一...

    C语言程序设计报告——杂志订阅软件

    C语言是一种强大的、通用的编程语言,它以其高效、灵活性和可移植性而被广泛应用于系统编程、应用软件开发、游戏制作等多个领域。学习C语言需要理论与实践相结合,通过课程设计,我们可以深入理解和掌握C语言的语法...

    C语言课程设计源码——课程管理系统

    C语言是一种强大的、通用的编程语言,它以其简洁的语法和高效性能在IT行业中占据着重要的地位。在本项目中,我们将会探讨如何利用C语言来开发一个课程管理系统。这个系统可能包含学生信息管理、课程信息管理以及成绩...

    c语言课件——PPT

    C语言是一种强大的、通用的编程语言,由Dennis Ritchie在1972年开发,主要用于系统编程和应用编程。它以其简洁的语法和对底层硬件的直接访问而闻名,使得程序员可以高效地编写操作系统、设备驱动程序和其他底层软件...

    c语言教程——C语言学习资料

    C语言是一种强大的、通用的编程语言,它由Dennis Ritchie在1972年为Unix操作系统开发。由于其简洁性、效率和灵活性,C语言已经成为软件开发的基础,尤其在系统编程、嵌入式系统、驱动开发以及游戏引擎等领域广泛应用...

    C语言课程设计——图书管理系统

    总之,"C语言课程设计——图书管理系统"项目涵盖了数据结构、C语言编程、软件设计等多个重要知识点,是提高编程技能和理解计算机科学概念的良好实践。通过实际操作,学生不仅能巩固理论知识,还能培养解决问题和团队...

    C语言编程软件

    总的来说,这个压缩包提供了一款老而经典的C语言编程环境——VC6.0,以及可能的相关学习资源,如图形编程的帮助文档,对于想要学习或复习C语言,尤其是准备计算机等级考试的用户来说,这是一个有价值的工具包。...

    C51编程入门经典(C语言嵌入式系统编程修炼之道)

    《C51编程入门经典——C语言嵌入式系统编程修炼之道》是一本专为初学者设计的指导书籍,旨在帮助新手快速掌握51单片机的C语言编程技巧。51系列单片机是嵌入式系统领域中最基础且广泛应用的微控制器之一,其简洁的...

    C语言期末大作业——图书信息管理系统(C语言,单链表).zip

    《C语言实现图书信息管理系统——基于单链表》 在这个C语言期末大作业中,学生被要求设计并实现一个图书信息管理系统。系统的核心数据结构是单链表,这是一种基础但非常重要的数据结构,用于存储和操作一系列有序或...

Global site tag (gtag.js) - Google Analytics