教你理解复杂的CC++声明
写给老婆的认错检讨书5篇

写给老婆的认错检讨书5篇在生活中与老婆产生矛盾是难免的,为了让老婆消气写一份检讨书给自己的老婆吧。
以下是小编为大家整理的写给老婆的认错检讨书范文,欢迎大家阅读!写给老婆的认错检讨书(一)亲爱的老婆大人:您好!首先本人作为一个男子汉,就应该那出一份男子汉的气魄,凡是讲究证据,不应该擅自猜疑(狐疑),还时常犹如小偷行为般的私自登陆你的,偷看你与好友的聊天记录,更为恶劣的是居然还修改你的密码,给您带来了诸多不便。
本人在此以非常愧疚的心情向您递交这份检讨书,以此反省本人擅自登陆你、擅自修改你密码以及时常不信任你的种种过错。
本人这样的猜忌、以及一些过分的行为,严重地影响了本人两的感情稳定大局,种种的不信任行为充分暴露出本人的无比小心眼,小气度的毛病。
而如本人这般不信任,也给本人们今后感情的发展埋下了不稳定因素,如果不积极加以制止改正,任其发展下去,势必造成非常严重的后果,这样的后果严重性甚至是本人不敢想象的,甚至是本人在夜晚梦到这样的可能性,都会伤心地流出眼泪。
执笔书写这份惹老婆生气的检讨书之前,本人经过了深刻反省,本人觉得很有必要对本人的错误做最最深刻的认识,才能在最大程度上避免错误的再发生。
检讨人:xxx20xx年xx月xx日写给老婆的认错检讨书(二)亲爱的老婆大人:您好!我错了,我真的错了,我惹你生气了,惹你不开心了,我不应该用这种态度对你的,更不应该发那个打你的头像给你,我很后悔,其实你不开心才是最大的不开心,每次你不理我的时候我很伤心,难过,我总是千方百计的想办法去哄你,去逗你,千金难买我愿意,只要老婆笑了,我就开心了,哄不好你,我所能做的就只是着急。
好急好急噢。
我心里那个慌张,我都心乱如麻了。
所以每次我都要先哄好你以后我的心才能平静。
同样其实我生气用不好的态度对待你的时候,我的心同样的痛和难过,伤着你的同时也在伤害着自己。
其实谁愿意生气呢,可能是我太在意你了,有时候你不经意的话或者一个玩笑都会让我压抑万分,让我不知所措,我很害怕,害怕你离开我,因为我不知道我的世界少了你会变成什么样。
放弃执行款声明范文

放弃执行款声明范文
尊敬的[相关执行部门/收款方称呼]:
你们好啊!我是[你的姓名],今天我要写个声明,就是关于那个执行款的事儿,我打算放弃它了。
咱先说说为啥要放弃呢。
其实也不是啥特别复杂的事儿,就是我思来想去,觉得这钱拿着吧,心里有点不踏实。
也许在别人眼里,这钱就像天上掉馅饼,不拿白不拿。
可我这人吧,有时候想法就比较奇特,感觉这钱拿了就好像欠了一份人情债似的,虽然可能根本就不是这么回事儿,但我心里就是这么个感觉。
再加上我最近也想通了一些事情,钱嘛,生不带来死不带去的。
为了这点钱,还得走各种程序,操心这个操心那个的,我这小脑袋瓜可受不了。
我就想图个清净,干脆放弃得了。
我知道这可能有点出乎大家的意料,毕竟执行款可不是个小数目(具体多少我也没仔细算过,反正就是个钱呗)。
但我这人就是这么个随性的性格,决定了就不反悔。
我在此郑重声明,我放弃对[具体执行款相关案件名称/款项来源]的执行款的所有权益。
我保证这是我经过深思熟虑后的决定,以后不管发生什么事儿,我都不会再对这笔钱有任何想法,也不会给大家找麻烦。
希望你们能理解我的这个决定,就像我理解你们为了这笔执行款忙前忙后的辛苦一样。
如果还需要我做什么手续或者签什么字之类的,你们尽管告诉我,我一定积极配合。
最后呢,祝大家生活愉快,工作顺利哈!
声明人:[你的姓名]
[具体日期]。
CC标准与CC认证简介(ISO15408)

随着技术的飞速发展、社会分工的进一步细化,加剧了组织与顾客之间的信息不对称。 许多 IT 用户缺乏判断其 IT 产品和系统的安全性是否恰当的知识、经验和资源,他们并不希 望仅仅依赖开发者的声明。用户可借助对 IT 产品和系统的安全分析(即安全评估)来增加 他们对其安全措施的信心。由此产生了对于 IT 产品和系统的安全性评估准则的需求。
保护轮廓 PP 引言 TOE 描述
TOE 安全环境 安全目的
IT 安全要求 PP 应用注释
PP 标识 PP 概述
假设 威胁 组织安全策略 TOE 安全目的 环境安全目的 TOE 安全要求 IT 环境安全要求
TOE 安全功能要求 TOE 安全保证要求
基本原理
安全目的基本原理 安全要求基本原理
图 保护轮廓内容
2. CC 标准内容简介 2.1 CC 标准的第 1 部分
介绍了 CC 标准中的一般性概念、相关的背景知识并引入了几个安全模型。CC 标准的 第 1 部分的掌握程度对于标准的后续部分的理解至关重要。
2.1.1 CC 标准的内容梗概 1. 范围 2. 引用标准 3. 定义 通用缩略语、术语表的范围、术语表 4. 概述 引言、CC 的目标读者、评估上下文、CC 的文档组织 5. 一般模型 安全上下文、CC 方法、安全概念、CC 描述材料、评估类型、保证的维护 6. 通用准则要求和评估结果 引言、PP 和 ST 要求、TOE 内的要求、评估结果的声明、TOE 评估结果的应 用 附录 A:通用准则项目 附录 B:PP 规范 附录 C:ST 规范
yacc解析CC包含文件

yacc解析CC包含文件我们知道对于C/C++包含文件声明是为程序提供了一些库存的功能,因此存在一种依赖关系,如果把这种依赖关系表达成为Makefile 的形式,那么就可以自动生成Makefile 。
在这一章里面并不会实现自动生成Makefile的功能,而是仅仅解析出所有的包含文件名,并记录下来。
1. 分析我们知道C/C++中存在两种形式的包含文件,一种是用“<>”包含的头文件,一种是“""”包含的头文件,这两种不同的形式表达了头文件的不同的搜索方式。
另外还需要注意的是:这两种方式包含的都是磁盘上存在的文件名。
也就是说,只要是磁盘上存在的文件名都可以包含的,都是合法的,因而C/C++里面存在的有扩展名的头文件和没有扩展名的头文件都是合法的。
并且还需要注意的是C/C++包含的头文件是可以续行的。
因而总结起来需要做到如下的几件事情:1.处理“<>”和“""”两种包含方式2.处理文件名3.处理续行2. Lex文件%{#include "main.hpp"// 在其中保存了记录头文件所需要的所有数据结构#include "frame.tab.h"// 由Yacc自动生成的所有标记声明,实际上都是C宏extern"C"{int yywrap(void);int yylex(void);}%}%x _INCLUDE_%x _INCLUDE_FILE_%%"#"[ \t]*"include"{BEGIN _INCLUDE_;// 进入_INCLUDE_状态yylval.clear();// 需要将所有的Include值初始化return INCLUDE;// 返回INCLUDE标记}<_INCLUDE_>[\"|<]{BEGIN _INCLUDE_FILE_;// 进入_INCLUDE_FILE_状态return *yytext; // 返回引号或者尖括号}<_INCLUDE_FILE_>[^\">]*{yylval.headerfile+=yytext;// 记录头文件字符串return HEADERFILE;// 返回头文件标记}<_INCLUDE_FILE_>[\"|>]{BEGIN INITIAL;// 恢复到初始状态,默认状态return *yytext;// 返回引号或者尖括号}[ \t\n] ;// 对于额外的空白都不处理直接扔掉%%int yywrap(void){return1;// 只处理一个输入文件}3. Yacc文件%{#include <iostream>#include "main.hpp"#define YYDEBUG 0// 将这个变量设置为1则表示启动Yacc的调试功能extern"C"{void yyerror(const char *s);extern int yylex(void);}std::vector<Include> g_Includes;// 用来记录所有的包含声明Include *g_pInclude;// 用来保存新增的包含声明信息的指针%}%token INCLUDE%token HEADERFILE%%program:/* empty */| program include_preprocess // 用这种递归的方式从有限的标记表达出无限的内容;include_preprocess:INCLUDE '<' HEADERFILE '>'{// 注意这里的$3,实际上就是上面的标记的第三个的意思// 因为yylval被声明为Include结构,参见main.hpp文件// 因而每个标记都是Include结构类型。
javacc+JJTree

一.JavaCC简介JavaCC(Java Compiler Compiler)是一个用JAVA开发的最受欢迎的语法分析生成器。
这个分析生成器工具可以读取上下文无关且有着特殊意义的语法并把它转换成可以识别且匹配该语法的JAVA程序。
JavaCC 可以在Java虚拟机(JVM) V1.2或更高的版本上使用,它是100%的纯Java代码,可以在多种平台上运行,与Sun当时推出Java的口号"Write Once Run Anywhere"相一致。
JavaCC还提供JJTree工具来帮助我们建立语法树,JJDoc工具为我们的源文件生成BNF范式(巴科斯-诺尔范式)文档(Html)。
二.JavaCC的特点JavaCC是一个用Java语言写的一个Java语法分析生成器,它所产生的文件都是纯Java代码文件,JavaCC和它所自动生成的语法分析器可以在多个平台上运行。
下面是JavaCC的一些具体特点:1.TOP-DOWN:JavaCC产生自顶向下的语法分析器,而YACC等工具则产生的是自底向上的语法分析器。
采用自顶向下的分析方法允许更通用的语法(但是包含左递归的语法除外)。
自顶向下的语法分析器还有其他的一些优点,比如:易于调试,可以分析语法中的任何非终结符,可以在语法分析的过程中在语法分析树中上下传值等。
RGE USER COMMUNTIY:是一个用JAVA开发的最受欢迎的语法分析生成器。
拥有成百上千的下载量和不计其数是使用者。
我们的邮件列表(https:///doc/mailinglist.html )和新闻组(pilers.tools.JavaCC)里的参与者有1000多人。
3.LEXICAL AND GRAMMAR SPECIFICATIONS IN ONE FILE:词法规范(如正则表达式、字符串等)和语法规范(BNF范式)书写在同一个文件里。
这使得语法易读和易维护。
4.TREE BUILDING PREPROCESSOR: JavaCC提供的JJTree工具,是一个强有力的语法树构造的预处理程序。
C语言符号、指令表

预处理指令注解://—单行注解;/*多行注解*/基本数据类型(int, float, double, char, void)用户自定义数据类型格式t y p e d e f s t r u c t{数据类型变量序列1;数据类型变量序列1;...}自定义数据类型的名称;C 32 个关键字Keil C51 扩展的关键字C语言常用转义字符表预定义标识符__FILE__ 正在编译的文件的名字__LINE__ 正在编译的文件的行号__DATE__ 编译时刻的日期字符串,例如:"25 Dec 2000" __TIME__ 编译时刻的时间字符串,例如:"12:30:55"常量表示法※假设a等于8,b等于2※比较运算结果是个布尔值既T R U E(真值)或FA L S E(假值)。
假设a等于8 逻辑运算※逻辑运算结果是个布尔值既T R U E(真值)或FA L S E(假值)。
假设a等于8 位逻辑运算※假设a等于5控制命令if语句i f(条件)语句1;e l s e语句2;例:i f(d==4)d=0;//如果d等于4就设置d等于0e l s e d++;//否则就将d加1i f(t i c k s==0){//如果t i c k s等于0t i c k s=1000;//t i c k s设置成1000c o u n t e r[0]++;//c o u n t e r[0]加1}嵌套if语句例:i f(c o u n t e r[0]==10){c o u n t e r[1]++;c o u n t e r[0]=0;i f(c o u n t e r[1]==10){c o u n t e r[2]++;c o u n t e r[1]=0;}}switch语句s w i t c h(变量){c a s e常量1:语句1;b r e a k;c a s e常量2:语句2;b r e a k;c a s e常量3:语句3;b r e a k;......d e f a u l t;语句n;}for循环f o r(初值,条件,变化值)语句;例:f o r(i=0;i<10;i++)x=x+i;f o r(i=1;i<10,i++)f o r(j=1;j<10,j++)p r i n t f(“%d%d”,i,j);无穷循环:f o r(;;);while循环w h i l e(条件)语句;例:w h i l e(c h!=!’A’)c h=g e t c h e();无穷循环:w h i l e(1);do/while循环d o{语句;...}w h i l e(条件);例:d o{c h=g e t c h e();}w h i l e(c h!=”A”);goto语句l o o p1:x++;i f(x<100)g o t o l o o p1;指针和函数指针的定义数据类型*指针变量的名字;例:c h a r*p;i n t*x;指针与数组例:c h a r f i l e n a m e[80];c h a r*p;p=f i l e n a m e;//指针p存放f i l e n a m e的开始地址i n t x[5]={1,2,3,4,5};i n t*p,s u m,i;p=x;//指针p存放数组x的开始地址f o r(i=0;i<5;i++)s u m=s u m+p[i];//p[i]相当于x[i]指针的运算1.针变量前面加上*号就是取得指针所指向位置的内容。
Coverity功能介绍

Coverity Prevent SQSPrevent SQS(软件质量系统)就是检测与解决C、C++、Java源代码中最严重得缺陷得领先得自动化方法。
通过对您得构建环境、源代码与开发过程给出一个完整得分析,Prevent SQS建立了获得高质量软件得标准。
静态源代码分析允许我们再软件开发生命周期得早期阶段发现与修复缺陷,节省数以百万计得相关成本。
Prevent SQS就是业界标准,因为只有Coverity理解与掌握静态源代码分析技术所具有得严格得要求。
●Coverity了解构建系统——Prevent SQS通过在操作系统流程这个层次监测您得构建系统来获得每一个操作得清晰视图,展现您得软件。
●Coverity了解源代码——Prevent SQS检测比当今市场上任何其她工具都更多得源代码信息;代码得结构、含义与意图都被用来揭示其中得严重得错误与不安全性。
●Coverity了解开发者——Prevent SQS通过一个客户化得工作流、功能强大得分析器与易于使用得工具,能够使缺陷在几分钟内被定位,解决缺陷。
绘制软件DNA图谱(C/C++)●Prevent SQS构建监测软件自动得检测您得编译系统执行得每一个操作。
●Prevent SQS可信编译器收集您代码中得语法、语义与依赖关系得细节信息。
●一个完整得编译器描述库保存了所有得通过可信编译器收集得信息,所以分析引擎拥有关于源代码得全面得信息。
Prevent SQS通过集成一个位于您得构建系统与操作系统之间得监测层,记录构建系统与操作系统得交互,获得对于您得构建系统得一个清晰得了解。
这个监测层检测所有得发起得可执行程序,与所有打开与读写得文件。
当Prevent SQS从您得构建系统检测到对您得编译器得调用,她执行很多步骤来了解调用操作及其对编译代码得影响。
Prevent SQS转换所有得命令来确切得了解本地预处理器与编译器将如何正确生成可执行程序。
构建系统中得一个嵌入层记录每个文件得特有得编译,Prevent SQS提供一个工具使您能够组合这些属性到她们得描述库与可执行程序中。
什么是COM如何使用COM

什么是COM,如何使用COM本文的目的是为刚刚接触COM的程序员提供编程指南,并帮助他们理解COM的基本概念。
内容包括COM规范简介,重要的COM术语以及如何重用现有的COM组件。
本文不包括如何编写自己的COM对象和接口。
COM即组件对象模型,是Component Object Model 取前三个字母的缩写,这三个字母在当今Windows的世界中随处可见。
随时涌现出来的大把大把的新技术都以COM为基础。
各种文档中也充斥着诸如COM对象、接口、服务器之类的术语。
因此,对于一个程序员来说,不仅要掌握使用COM的方法,而且还要彻底熟悉COM的所有一切。
本文由浅入深描述COM的内在运行机制,教你如何使用第三方提供的COM 对象(以Windows 外壳组件Shell为例)。
读完本文后,你就能掌握如何使用Windows操作系统中内建的组件和第三方提供的COM对象。
本文假设你精通C++语言。
在例子代码中使用了一点MFC和ATL,如果你不熟悉MFC和ATL也没关系,本文会对这些代码进行完全透彻的解释。
本文包括以下几个部分:COM——到底是什么?——COM标准的要点介绍,它被设计用来解决什么问题基本元素的定义——COM术语以及这些术语的含义使用和处理COM对象——如何创建、使用和销毁COM对象基本接口——描述IUnknown基本接口及其方法掌握串的处理——在COM代码中如何处理串应用COM技术——例子代码,举例说明本文所讨论的所有概念处理HRESULT——HRESULT类型描述,如何监测错误及成功代码COM——到底是什么简单地说,COM是一种跨应用和语言共享二进制代码的方法。
与C++不同,它提倡源代码重用。
ATL便是一个很好的例证。
源码级重用虽然好,但只能用于C++。
它还带来了名字冲突的可能性,更不用说不断拷贝重用代码而导致工程膨胀和臃肿。
Windows使用DLLs在二进制级共享代码。
这也是Windows程序运行的关键——重用kernel32.dll, user32.dll等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
介绍曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const 修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。
需要强调一下的是,复杂的C/C++声明并不是好的编程风格;我这里仅仅是教你如何去理解这些声明。
注意:为了保证能够在同一行上显示代码和相关注释,本文最好在至少1024x768分辨率的显示器上阅读。
基础让我们从一个非常简单的例子开始,如下:int n;这个应该被理解为“declare n as an int”(n是一个int型的变量)。
接下去来看一下指针变量,如下:int *p;这个应该被理解为“declare p as an int *”(p是一个int *型的变量),或者说p是一个指向一个int型变量的指针。
我想在这里展开讨论一下:我觉得在声明一个指针(或引用)类型的变量时,最好将*(或&)写在紧靠变量之前,而不是紧跟基本类型之后。
这样可以避免一些理解上的误区,比如:int* p,q;第一眼看去,好像是p和q都是int*类型的,但事实上,只有p是一个指针,而q是一个最简单的int型变量。
我们还是继续我们前面的话题,再来看一个指针的指针的例子:char **argv;理论上,对于指针的级数没有限制,你可以定义一个浮点类型变量的指针的指针的指针的指针...再来看如下的声明:int RollNum[30][4];int (*p)[4]=RollNum;int *q[5];这里,p被声明为一个指向一个4元素(int类型)数组的指针,而q被声明为一个包含5个元素(int类型的指针)的数组。
另外,我们还可以在同一个声明中混合实用*和&,如下:int **p1; // p1 is a pointer to a pointer to an int.int *&p2; // p2 is a reference to a pointer to an int.int &*p3; // ERROR: Pointer to a reference is illegal.int &&p4; // ERROR: Reference to a reference is illegal.注:p1是一个int类型的指针的指针;p2是一个int类型的指针的引用;p3是一个int类型引用的指针(不合法!);p4是一个int类型引用的引用(不合法!)。
const修饰符当你想阻止一个变量被改变,可能会用到const关键字。
在你给一个变量加上const修饰符的同时,通常需要对它进行初始化,因为以后的任何时候你将没有机会再去改变它。
例如:const int n=5;int const m=10;上述两个变量n和m其实是同一种类型的--都是const int(整形恒量)。
因为C++标准规定,const关键字放在类型或变量名之前等价的。
我个人更喜欢第一种声明方式,因为它更突出了const修饰符的作用。
当const与指针一起使用时,容易让人感到迷惑。
例如,我们来看一下下面的p和q的声明:const int *p;int const *q;他们当中哪一个代表const int类型的指针(const直接修饰int),哪一个代表int类型的const指针(const 直接修饰指针)?实际上,p和q都被声明为const int类型的指针。
而int类型的const指针应该这样声明:int * const r= &n; // n has been declared as an int这里,p和q都是指向const int类型的指针,也就是说,你在以后的程序里不能改变*p的值。
而r是一个const指针,它在声明的时候被初始化指向变量n(即r=&n;)之后,r的值将不再允许被改变(但*r的值可以改变)。
组合上述两种const修饰的情况,我们来声明一个指向const int类型的const指针,如下:const int * const p=&n // n has been declared as const int下面给出的一些关于const的声明,将帮助你彻底理清const的用法。
不过请注意,下面的一些声明是不能被编译通过的,因为他们需要在声明的同时进行初始化。
为了简洁起见,我忽略了初始化部分;因为加入初始化代码的话,下面每个声明都将增加两行代码。
char ** p1; // pointer to pointer to charconst char **p2; // pointer to pointer to const charchar * const * p3; // pointer to const pointer to charconst char * const * p4; // pointer to const pointer to const charchar ** const p5; // const pointer to pointer to charconst char ** const p6; // const pointer to pointer to const charchar * const * const p7; // const pointer to const pointer to charconst char * const * const p8; // const pointer to const pointer to const char注:p1是指向char类型的指针的指针;p2是指向const char类型的指针的指针;p3是指向char类型的const 指针;p4是指向const char类型的const指针;p5是指向char类型的指针的const指针;p6是指向const char 类型的指针的const指针;p7是指向char类型const指针的const指针;p8是指向const char类型的const 指针的const指针。
typedef的妙用typedef给你一种方式来克服“*只适合于变量而不适合于类型”的弊端。
你可以如下使用typedef:typedef char * PCHAR;PCHAR p,q;这里的p和q都被声明为指针。
(如果不使用typedef,q将被声明为一个char变量,这跟我们的第一眼感觉不太一致!)下面有一些使用typedef的声明,并且给出了解释:typedef char * a; // a is a pointer to a chartypedef a b(); // b is a function that returns// a pointer to a chartypedef b *c; // c is a pointer to a function// that returns a pointer to a chartypedef c d(); // d is a function returning// a pointer to a function// that returns a pointer to a chartypedef d *e; // e is a pointer to a function// returning a pointer to a// function that returns a// pointer to a chare var[10]; // var is an array of 10 pointers to// functions returning pointers to// functions returning pointers to chars.typedef经常用在一个结构声明之前,如下。
这样,当创建结构变量的时候,允许你不使用关键字struct(在C中,创建结构变量时要求使用struct关键字,如struct tagPOINT a;而在C++中,struct可以忽略,如tagPOINT b)。
typedef struct tagPOINT{int x;int y;}POINT;POINT p; /* Valid C code */函数指针函数指针可能是最容易引起理解上的困惑的声明。
函数指针在DOS时代写TSR程序时用得最多;在Win32和X-Windows时代,他们被用在需要回调函数的场合。
当然,还有其它很多地方需要用到函数指针:虚函数表,STL中的一些模板,Win NT/2K/XP系统服务等。
让我们来看一个函数指针的简单例子:int (*p)(char);这里p被声明为一个函数指针,这个函数带一个char类型的参数,并且有一个int类型的返回值。
另外,带有两个float类型参数、返回值是char类型的指针的指针的函数指针可以声明如下:char ** (*p)(float, float);那么,带两个char类型的const指针参数、无返回值的函数指针又该如何声明呢?参考如下:void * (*a[5])(char * const, char * const);“右左法则”[重要!!!]The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. Once everything in the parentheses has been parsed, jump out of it. Continue till the whole declaration has been parsed.这是一个简单的法则,但能让你准确理解所有的声明。
这个法则运用如下:从最内部的括号开始阅读声明,向右看,然后向左看。
当你碰到一个括号时就调转阅读的方向。
括号内的所有内容都分析完毕就跳出括号的范围。
这样继续,直到整个声明都被分析完毕。
对上述“右左法则”做一个小小的修正:当你第一次开始阅读声明的时候,你必须从变量名开始,而不是从最内部的括号。
下面结合例子来演示一下“右左法则”的使用。
int * (* (*fp1) (int) ) [10];阅读步骤:1. 从变量名开始-------------------------------------------- fp12. 往右看,什么也没有,碰到了),因此往左看,碰到一个* ------ 一个指针3. 跳出括号,碰到了(int) ----------------------------------- 一个带一个int参数的函数4. 向左看,发现一个* --------------------------------------- (函数)返回一个指针5. 跳出括号,向右看,碰到[10] ------------------------------ 一个10元素的数组6. 向左看,发现一个* --------------------------------------- 指针7. 向左看,发现int ----------------------------------------- int类型总结:fp1被声明成为一个函数的指针,该函数返回指向指针数组的指针.再来看一个例子:int *( *( *arr[5])())();阅读步骤:1. 从变量名开始-------------------------------------------- arr2. 往右看,发现是一个数组---------------------------------- 一个5元素的数组3. 向左看,发现一个* --------------------------------------- 指针4. 跳出括号,向右看,发现() -------------------------------- 不带参数的函数5. 向左看,碰到* ------------------------------------------- (函数)返回一个指针6. 跳出括号,向右发现() ------------------------------------ 不带参数的函数7. 向左,发现* --------------------------------------------- (函数)返回一个指针8. 继续向左,发现int --------------------------------------- int类型总结:??还有更多的例子:float ( * ( *b()) [] )(); // b is a function that returns a// pointer to an array of pointers// to functions returning floats.void * ( *c) ( char, int (*)()); // c is a pointer to a function that takes // two parameters:// a char and a pointer to a// function that takes no// parameters and returns// an int// and returns a pointer to void.void ** (*d) (int &,char **(*)(char *, char **)); // d is a pointer to a function that takes // two parameters:// a reference to an int and a pointer// to a function that takes two parameters:// a pointer to a char and a pointer// to a pointer to a char// and returns a pointer to a pointer// to a char// and returns a pointer to a pointer to voidfloat ( * ( * e[10])(int &) ) [5]; // e is an array of 10 pointers to// functions that take a single// reference to an int as an argument// and return pointers to// an array of 5 floats.。