. . . . . . . . . . . . . . Blog Garden' C plus plus (My technology Impire!)

................................................................ It‘s a age of economic globalization and Infomation globalization........................................

复杂的声明和定义

复杂的声明和定义

先看一个简单例子: 
        void(*funcPtr)();
        当看到这样的一个定义时,最好的处理方法是从中间开始和向外扩展以及挖空括号。
        “从中间开始”的意思是从变量名开始,“向外扩展”的意思是先注意右边最近的项,遇括号变向,如此持续下去。“挖空括号”是指把变量名所在的括号去掉并去掉参数表所在括号,就得到其函数的返回值(仅限于函数声明)。
        以上分析如下: 中间开始----> funcPtr 向右走------> 遇括号 转向--------> 遇* ,funcPtr是一个指针 ,又是括号 转向--------> 一个空参数表(不带参数的函数) 向左走------> void 返回值------> void 最终结果是: funcPtr是一个指针,它指向一个不带参数并返回void的函数。

再看几个更复杂的: 
        void *(*(*fp1)(int))[10]; fp1是一个指向函数的指针,它接受一个int参数并返回一个指向含有10个void指针数组的指针(void * [10])。 
        float (*(*fp2)(int,int,float))(int); fp2是一个指向函数的指针,它接受三个参数:int, int, float且返回一个指向函数的指针,该函数有一个int参数并返回一个float。 
        typedef double (*(*(*fp3)())[10])(); //返回值为:double (*(*)[10])(); fp3 a; fp3是一个指向函数的指针,该函数无参数并返回一个指向含有10个指向函数指针数组的指针,这些函数不接受参数并返回double值. 
        int (*(*f4())[10])(); //返回值为 int(*([10]))(); f4是一个返回指针的函数,该指针指向含有10个函数指针的数组,这些函数返回整型值.

总结: 
        我们可能很少甚至是从不使用过如此复杂的声明和定义,但如果通过练习能把它搞清楚的话,就不会在现实生活中可能遇到的稍微复杂的情况所困惑!参考资料: <>

posted on 2006-10-04 03:20 Technical Consultant 阅读(320) 评论(0)  编辑 收藏 引用 所属分类: C plus plus


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


My Links

Blog Stats

常用链接

留言簿(3)

随笔分类(47)

随笔档案(45)

文章分类(87)

文章档案(87)

相册

C++

Database

Game Develope & Game Engine

Java

News

Web

最新随笔

搜索

最新评论

阅读排行榜

评论排行榜