《C专家编程》第三章介绍了如何分析复杂的声明,讲的非常不错。对于作者介绍的分析复杂声明的方法,我没有完全掌握,不过,我有我自己的一套方法来解析复杂的声明,正所谓条条大道通罗马,只要结果一样,必须在乎过程呢。今天在网上找了几个复杂的声明,练练手(声明的例子全部来自网络,原谅出处未详)。记下此文,作个标记,待日后回味。
int (*func)(int *p)
这个就不解释了,每本C语言参考书上都会有的。作为一个C/C++程序员还不会的话,说明你已经out了~~_~~
int (*func)(int *p, int (*f)(int*))
func是一个指针,指向一个函数,函数接收两个参数,第一个参数是int *,第二个参数是一个函数指针(该函数指针接收int *参数,返回int值),函数返回int值。使用typedef来简化一下:
int (*func)(int *p, int (*f)(int*));
/* 等价于 */
typedef int (*functor1)(int *);
typedef int (*functor2)(int *, functor1);
functor2 func;
int (*func[5])(int *p)
func是一个包含5个元素的数组,数组中的每个元素是函数指针,函数接收int *参数,并返回int值。用typedef来简化一下:
int (*func[5])(int *p);
/* 等价于 */
typedef (*functor)(int *);
functor func[5];
int (*(*func)[5])(int *p))
func是一个指针,指针指向包含5个元素的数组,数组是的每个元素是函数指针,该函数接收int *参数,并返回int值。用下面的代码来表示一下func是个什么东东:
int (*(*func)[5])(int *p);
/* func是下面这个东东: */
typedef int (*functor)(int *);
functor arr[5];
func = &arr;
int (*(*func)(int *p))[5]
func是一个指针,指针指向函数,函数接收int *参数,返回指针,指针指向包含5个元素的int型数组。用typedef来简化一下:
int (*(*func)(int *p))[5];
/* 等价于 */
typedef int arr[5];
typedef arr *(*functor)(int *);
functor func;
int (*(*func)[5][6])[7][8]
func是一个指针,指针指向行数为5, 列数为6的二维数组,数组中保存的是指针,指针指向行数为7,列数为8的int型数组。下面的代码也许会让你更清楚一点:
int (*(*func)[5][6])[7][8];
/* see it: */
typedef int arr[7][8];
arr *func1[5][6];
func = &func1;
int (*(*(*func)(int *))[5])(int *)
func是一个函数指针,函数接收int *参数,返回一个指针,指针指向包括5个元素的数组,数组中的元素是函数指针,函数接收int *参数,返回int值。用typedef简化一下下:
int (*(*(*func)(int *))[5])(int *);
/* 等价于 */
typedef int (*functor1)(int *);
typedef functor1 arr[5];
typedef arr *(*functor2)(int *);
functor2 func;
int (*(*func[7][8][9])(int*))[5]
func是一个三个数组,数组中的每个元素是指针,指针指向函数,函数指向int*参数,返回指几包含5个元素的int数组(嗷口),和typedef来简化一下:
int (*(*func[7][8][9])(int*))[5];
/* 等价于 */
typedef int arr[5];
typedef arr *(*functor)(int *);
functor func[7][8][9];
看完这些例子,你晕了吗?赶紧找个美女,给你做人工呼吸吧~_~~~
分享到:
相关推荐
"解读C语言复杂声明" C语言中的复杂声明是一种困难的概念,即使是经验丰富的程序员也难以理解和解析。因此,本文将详细讨论C语言中的复杂声明,包括右左法则、typedef逐步分解方法,帮助C语言的初学者准确把握复杂...
下面我们将详细探讨如何解析和理解C语言的复杂声明。 首先,我们遵循声明中的优先级规则,它决定了我们读取声明的顺序:名称、()、[]、*。这意味着在声明中,我们首先找到变量的名称,然后是括号,接着是方括号,...
然而,由于C语言的声明语法相对复杂,有时理解复杂的声明可能会成为初学者的一大挑战。这就是"C语言语句声明解释程序"的作用所在。 这个程序,名为`cdecl`,是一个实用工具,专门设计用来解析和解释C语言的声明。在...
本文将深入探讨“复杂指针”的概念,以及如何使用“右左法则”来解析和理解复杂的指针声明。 复杂指针声明通常涉及指针、数组和函数的嵌套组合,它们的解析需要遵循一定的规则。右左法则是一种流行的方法,用于理解...
### C语言中的各种声明详解 #### 一、概述 C语言是一种广泛使用的程序...无论是基本类型还是复杂类型,C语言都提供了丰富的声明方式来满足不同的需求。理解这些声明方式对于编写高效、可读性强的C语言程序至关重要。
本项目"用C语言实现的计算器(支持复杂运算)"旨在教你如何利用C语言来创建一个功能丰富的计算器程序,能够处理复杂的数学运算。这将涉及到以下几个重要的知识点: 1. **基本数据类型**:C语言提供了如int、float、...
右左法则是一种解析这些复杂声明的有效方法,虽然它不是C语言标准的一部分,但广泛被C程序员用来理解声明的含义。下面我们将详细讨论这个法则以及通过一些实例来演示其应用。 右左法则的基本思想是从声明中未定义的...
cdecl声明解析器,帮助你解析复杂的C语言声明。
在这个主题中,我们将深入探讨C语言中的声明语法,特别是涉及函数指针的复杂声明。 首先,让我们看一个复杂的声明示例:`(*(void (*)( ) )0)( )`。这个表达式看起来很复杂,但其实可以通过逐步分解来理解。它涉及到...
C语言中的指针声明可以非常复杂,以至于让人难以理解和解析。为了解决这个问题,右左法则被引入,以帮助开发者更好地理解和解析复杂的指针声明。右左法则是一个简单却非常实用的方法,它可以帮助开发者快速地解析...
【C语言声明语句的文字描述和可视化表示】 在C语言编程中,声明语句是用来定义变量、函数、数据结构等的语法结构,它们是程序的基础...它不仅适用于初学者,也对经验丰富的程序员在处理复杂声明时提供了有力的工具。
右左法则是一种解析C语言中复杂指针声明的方法,它不是C语言标准的一部分,而是根据标准中的声明规则归纳出来的。该法则的英文原文是:“The right-left rule: Start reading the declaration from the innermost ...
3. **第05章_循环结构程序的设计.ppt**:介绍了循环结构,如while、for循环,以及如何使用break和continue语句来控制循环流程,这是编写复杂逻辑的重要基础。 4. **第06章_数组.ppt**:数组是C语言中存储相同类型...
了解C语言的程序结构,包括函数的使用、数据类型的声明、控制流的构造等。同时,熟悉C语言的开发环境,如编译器和集成开发环境,例如Microsoft Visual C++,这对于编写、调试和运行C程序至关重要。 总的来说,C语言...
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明...
2. **C语言算法**:算法是解决问题的步骤或方法,C语言中的算法学习涉及到排序算法(如冒泡排序、快速排序)、查找算法(如线性查找、二分查找)以及复杂的数据结构处理算法。 3. **C语言课件**:课件可能包括PPT、...
结构声明和联合声明是C语言中处理复杂数据结构的重要部分,文档对它们的声明和使用都给出了详细说明。 C语言的表达式和运算符构成了程序的逻辑核心,文档介绍了包括赋值、算术、逻辑、位运算等运算符及其使用规则。...
5. **结构体与联合体**:结构体和联合体是C语言中组合复杂数据类型的方法,可以用于表示现实世界中的对象或数据结构。 6. **文件操作**:C语言提供了标准I/O库,可以进行文件的读写操作,这对于数据存储和程序间...
1. **基本语法**:介绍C语言的基本结构,包括变量的声明、数据类型(整型、浮点型、字符型等)、运算符的使用、流程控制语句(如if-else、switch、for、while等)。 2. **函数**:详细阐述函数的定义、调用、参数...
5. 函数:函数是C语言中的重要组成部分,可以将复杂的任务分解为多个独立的模块,提高代码的可读性和可重用性。 6. 输入输出操作:在单片机中,通过函数如printf和scanf进行输入输出,而在实际硬件交互时,可能需要...