- 浏览: 444583 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
zjhgx:
多谢,多谢。多谢
Ubuntu 中软件的安装、卸载以及查看的方法总结 -
37du:
受教了,对于理解运行过程有很好的效果
ActionMapper---webwork 2.1到2.2 的变化 -
chxiaowu:
非常好,谢谢!
Ubuntu 中软件的安装、卸载以及查看的方法总结 -
euii:
谢谢,这样的总结。
Ubuntu 中软件的安装、卸载以及查看的方法总结 -
xiaoyao3857:
谢谢,正需要这样的汇总型字典!
Ubuntu 中软件的安装、卸载以及查看的方法总结
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.
这是一个简单的法则,但能让你准确理解所有的声明。这个法则运
用如下:从最内部的括号开始阅读声明,向右看,然后向左看。当你碰到一个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继
续,直到整个声明都被分析完毕。对上述
“
右左法则
”
做一个小小的修正:当你第一次开始阅读声明的时候,你必须从变
量名开始,而不是从最内部的括号。
#include<signal.h>
void (* signal (int signo, void (*func) (int) )) (int );
像 signal 函数,阅读步骤:
- 从 func 开始 -----------------------------------------------func
- 向右看碰到)因此向左看碰到一个 *-------------------------- 一个指针
- 跳出括号,碰到( int ) --------------------------------------------------------- 一个带一个 int 类型参数的函数
- 向左看, int signo , ------------------------------------------------------------ 又一个 int 类型的参数
- 红色部分处理完跳出括号向右看遇到)向左遇到 *-------------------- ( signal 函数)返回一个指针
- 粗体部分看完了跳出向右遇到( int ) -------------------------------------- 一个带 int 类型参数的函数
- 向左看发现 void-------------------------------------------------------------------void 类型, signal 函数返回的指针指向一个参数为 int 类型,返回值为 void 类型的函数。
可以理解为 signal 函数的参数有两个,一个是 int 类型,一个是一个函数指针(参数类型为 int ,返回值为 void ),返回值为一个函数指针(参数类型为 int ,返回值为 void )。
因此按照书中的解释,如果使用 typedef 更好理解一些:
typedef void SigFunc ( int ); // 声明一个类型,该类型为函数且有一个 int 参数并且返回值为 void 型。
则 signal 函数可以简写为:
SigFunc * signal ( int , SigFunc* );
关于理解复杂的 c++ 声明,这上面的左右法则是从 http://buaadallas.blog.51cto.com/399160/80947 学来的,上面有几个更复杂的声明:
下面结合例子来演示一下
“
右左法则
”
的使用。
int * (* (*fp1) (int) ) [10];
阅读步骤:
1.
从变量名开始
-------------------------------------------- fp1
2.
往右看,什么也没有,碰到了
)
,因此往左看,碰到一个
* ------
一个指针
3.
跳出括号,碰到了
(int)
-----------------------------------
一个带一个
int
参数的函数
4.
向左看,发现一个
*
---------------------------------------
(函数)返回一个指针
5.
跳出括号,向右看,碰到
[10]
------------------------------
一个
10
元素的数组
6.
向左看,发现一个
*
---------------------------------------
指针
7.
向左看,发现
int
----------------------------------------- int
类型
总结:
fp1
被声明成为一个函数的指针
,
该函数返回指向指针数组的指针
.
再来看一个例子:
int *( *( *arr[5])())();
阅读步骤:
1.
从变量名开始
-------------------------------------------- arr
2.
往右看,发现是一个数组
----------------------------------
一个
5
元素的数组
3.
向左看,发现一个
*
---------------------------------------
指针
4.
跳出括号,向右看,发现
()
--------------------------------
不带参数的函数
5.
向左看,碰到
*
-------------------------------------------
(函数)返回一个指针
6.
跳出括号,向右发现
()
------------------------------------
不带参数的函数
7.
向左,发现
*
---------------------------------------------
(函数)返回一个指针
8.
继续向左,发现
int
--------------------------------------- int
类型
//arr is
an array of 5 pointers to functions
//that
take no arguments and return pointers to
//functions
having no arguments and having int type as return value.
还有更多的例子:
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 void
float ( * ( * 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.
发表评论
-
OLAP与OLTP
2011-02-10 13:51 1536当今的数据处理大致可 ... -
VPS主机技术原理
2011-01-11 11:42 1285VPS主机是一项服务器虚拟化和自动化技术 ,它采用的是操 ... -
学习STL map, STL set之数据结构基础
2010-12-23 09:45 2052学习STL map, STL set之数据结构基础 ... -
经典的排错过程 expected unqualified-id before string constant
2010-10-20 18:52 10909答案是:我的代码少了一个 “;” ============= ... -
命令行输出彩色字符串
2010-09-30 14:13 1670#include int main (int argc, ... -
source Insight常用自定义命令和一些小技巧
2010-08-13 14:34 4301在Source Insight中添加自定义功能的步骤如下: ... -
WEB服务器性能瓶颈分析
2010-07-29 15:15 1592本文先介绍一下各种WEB ... -
10个强大的开源Web流量分析工具
2010-06-18 20:18 2495锐商企业CMS 写道 & ... -
URL Encoding
2010-06-10 20:45 1475URL:http://localhost:8080/examp ... -
Trie- 字典树(单词树)的基本应用
2010-05-12 14:47 1332#include <stdio.h> #inc ... -
HTTP 1.1的一些细节:Cache机制
2010-05-08 13:38 1562HTTP 1.1的一些细节:Cache机制 ... -
Web缓存加速指南
2010-05-08 12:15 864原文(英文)地址: http://www.mnot.net/c ... -
RGB 转换至 YCbCr (YUV) 的计算公式
2010-03-28 12:46 9164对于每个取样点的 R,G,B 值, 在转换到 YUV colo ... -
理解I/O Completion Port
2010-03-13 10:42 1352欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的 ... -
关于IO ports和IO memory
2009-12-21 15:30 2126在IA32 Manuals-Basic Architectur ... -
C++类型转换运算符的使用方法
2009-12-21 14:34 1268C++的四个类型转换运算符已经有很久了,但一直没有弄清楚它们的 ... -
C/C++关键字static,const,inline,define,typedef
2009-12-21 14:13 2010一 static 1) 产生背景 ... -
Keyword volatile in C Programming Language
2009-12-21 14:06 889volatile关键字是一种类 ... -
C/C++位域(Bit-fields)之我见
2009-12-13 17:29 2059原文 : http://blog.csdn.net/ztz02 ... -
Windows7内存管理机制Superfetch介绍
2009-12-02 20:46 3546在了解Superfetch内存管理 ...
相关推荐
C语言右左法则----复杂指针解析 因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既着名又常用的方法。不过,右左法 则其实并不是C标准里面的内容,它是从C标准...
右左法则是一个既著名又常用的方法。不过,右左 法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩 识一个声明的,...
右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,...
右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,...
右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,...
不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可 以说是相反的。右左法则的英文...
如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法
◆ 中左法则: 以直线为优先的前进方向,然后是左边方向、右边方向。与此类似的还有中右法则。 ◆ 乱数法则: 取随机值作为前进方向。 ◆ 向心法则: 由于终点设在迷宫的中心,遇有交叉时,以指向迷宫中心的方向为...
C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地 理解任何C/C++声明的“右左法则”。需要强调一下的是,复杂的C/C++声明并不是好...
一步一步教会你如何理解这种复杂的C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。...
我们将从每天都能碰到的较简单的声明入手,然后逐步加入 const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。需要强调一下的是,复杂的C/C+ +声明并不是好的编程风格...
主要介绍了深入学习C语言中的函数指针和左右法则,左右法则是一种常用的C指针声明,需要的朋友可以参考下
一步一步教会你如何理解这种复杂的C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。...
C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地 理解任何C/C++声明的“右左法则”。需要强调一下的是,复杂的C/C++声明并不是好...
一步一步教会你如何理解这种复杂的C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。...
38. 右左法则- 复杂指针解析 189 39. 回车和换行的区别 192 40. 堆和堆栈的区别 194 41. 堆和堆栈的区别 198 42. 如何写出专业的C头文件 202 43. 打造最快的Hash表 207 44. 指针与数组学习笔记 222 45. 数组不是指针...
针对无线传感器网络贪婪地理路由协议中的路由空洞问题,分析了现有路由空洞解决策略的不足,对GPSR路由协议中边界转发策略进行改进,提出了一种左、右手法则相结合的分区边界转发策略。仿真结果表明,改进后的协议...
C/C++所有复杂的声明结构,都是由各种声明的嵌套构成的,如何理解复杂指针声明,右左法则是一个很著名,很有效的方法,不过,右左法则其实并不是C/C++标准里面的内容,它是从C/C++标准的声明规定中归纳出来的方法,C...