`
qepwqnp
  • 浏览: 108864 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

C语言复杂声明

阅读更多

《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语言复杂声明.pdf

    "解读C语言复杂声明" C语言中的复杂声明是一种困难的概念,即使是经验丰富的程序员也难以理解和解析。因此,本文将详细讨论C语言中的复杂声明,包括右左法则、typedef逐步分解方法,帮助C语言的初学者准确把握复杂...

    C语言复杂声明xiaoyi

    下面我们将详细探讨如何解析和理解C语言的复杂声明。 首先,我们遵循声明中的优先级规则,它决定了我们读取声明的顺序:名称、()、[]、*。这意味着在声明中,我们首先找到变量的名称,然后是括号,接着是方括号,...

    c语言语句声明 解释程序

    然而,由于C语言的声明语法相对复杂,有时理解复杂的声明可能会成为初学者的一大挑战。这就是"C语言语句声明解释程序"的作用所在。 这个程序,名为`cdecl`,是一个实用工具,专门设计用来解析和解释C语言的声明。在...

    很好的C语言复杂指针分析

    本文将深入探讨“复杂指针”的概念,以及如何使用“右左法则”来解析和理解复杂的指针声明。 复杂指针声明通常涉及指针、数组和函数的嵌套组合,它们的解析需要遵循一定的规则。右左法则是一种流行的方法,用于理解...

    总结c语言的各种声明

    ### C语言中的各种声明详解 #### 一、概述 C语言是一种广泛使用的程序...无论是基本类型还是复杂类型,C语言都提供了丰富的声明方式来满足不同的需求。理解这些声明方式对于编写高效、可读性强的C语言程序至关重要。

    用C语言实现的计算器(支持复杂运算)

    本项目"用C语言实现的计算器(支持复杂运算)"旨在教你如何利用C语言来创建一个功能丰富的计算器程序,能够处理复杂的数学运算。这将涉及到以下几个重要的知识点: 1. **基本数据类型**:C语言提供了如int、float、...

    C语言所有复杂的指针声明

    右左法则是一种解析这些复杂声明的有效方法,虽然它不是C语言标准的一部分,但广泛被C程序员用来理解声明的含义。下面我们将详细讨论这个法则以及通过一些实例来演示其应用。 右左法则的基本思想是从声明中未定义的...

    cdecl(C语言声明解析器)

    cdecl声明解析器,帮助你解析复杂的C语言声明。

    水滴石穿C语言之声明的语法

    在这个主题中,我们将深入探讨C语言中的声明语法,特别是涉及函数指针的复杂声明。 首先,让我们看一个复杂的声明示例:`(*(void (*)( ) )0)( )`。这个表达式看起来很复杂,但其实可以通过逐步分解来理解。它涉及到...

    C语言右左法则----复杂指针解析

    C语言中的指针声明可以非常复杂,以至于让人难以理解和解析。为了解决这个问题,右左法则被引入,以帮助开发者更好地理解和解析复杂的指针声明。右左法则是一个简单却非常实用的方法,它可以帮助开发者快速地解析...

    C语言声明语句的文字描述和可视化表示.pdf

    【C语言声明语句的文字描述和可视化表示】 在C语言编程中,声明语句是用来定义变量、函数、数据结构等的语法结构,它们是程序的基础...它不仅适用于初学者,也对经验丰富的程序员在处理复杂声明时提供了有力的工具。

    超强的指针学习笔记 C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。

    右左法则是一种解析C语言中复杂指针声明的方法,它不是C语言标准的一部分,而是根据标准中的声明规则归纳出来的。该法则的英文原文是:“The right-left rule: Start reading the declaration from the innermost ...

    c语言教案 c语言课件 C语言

    3. **第05章_循环结构程序的设计.ppt**:介绍了循环结构,如while、for循环,以及如何使用break和continue语句来控制循环流程,这是编写复杂逻辑的重要基础。 4. **第06章_数组.ppt**:数组是C语言中存储相同类型...

    C语言概述 C语言概述 C语言概述

    了解C语言的程序结构,包括函数的使用、数据类型的声明、控制流的构造等。同时,熟悉C语言的开发环境,如编译器和集成开发环境,例如Microsoft Visual C++,这对于编写、调试和运行C程序至关重要。 总的来说,C语言...

    c语言框架c语言框架c语言框架

    C语言支持基本的数据类型,如整型(int)、浮点型(float和double)、字符型(char)等,以及结构体、联合体、枚举等复杂数据结构。指针是C语言的一大特色,它可以指向变量、数组、结构体等,实现高效的数据操作和内存管理...

    C语言指针学习笔记

    C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明...

    C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计,C语言数组,C语言循环控制,C语言预处理命令,C语言文件操作指针,C语言选择结构程序设计,C语言结构体与共用体,C语言文件操作,C语言函数

    2. **C语言算法**:算法是解决问题的步骤或方法,C语言中的算法学习涉及到排序算法(如冒泡排序、快速排序)、查找算法(如线性查找、二分查找)以及复杂的数据结构处理算法。 3. **C语言课件**:课件可能包括PPT、...

    C语言C语言C语言C语言

    在深入讲解C语言的知识点时,我们首先要理解C语言的基本结构,包括变量声明、数据类型(如int、char、float等)、运算符、控制流(如if...else、for、while循环)以及函数定义和调用。然后是更高级的主题,例如指针...

    C语言参考文档官方中文版

    结构声明和联合声明是C语言中处理复杂数据结构的重要部分,文档对它们的声明和使用都给出了详细说明。 C语言的表达式和运算符构成了程序的逻辑核心,文档介绍了包括赋值、算术、逻辑、位运算等运算符及其使用规则。...

    C语言课件 C语言资源

    5. **结构体与联合体**:结构体和联合体是C语言中组合复杂数据类型的方法,可以用于表示现实世界中的对象或数据结构。 6. **文件操作**:C语言提供了标准I/O库,可以进行文件的读写操作,这对于数据存储和程序间...

Global site tag (gtag.js) - Google Analytics