1、方法也是有类型的,方法的类型由返回类型和形参表决定。比如int F (int)的类型就是去掉方法名,int (int)。

2、对于方法类型,在返回类型和形参表之间,加上一个名称F,就表示一个特定的方法F。

3、思考,如果我在返回类型和形参表之间,加上一个指针变量呢?

  表示指向这一类方法的指针。即int (*P) (int),需要特别注意的是,必须使用括号把*P括起来。如果没有括起来,int *P(int),从编译器的角度理解,就变成了返回int指针的方法声明。

4、那么接着思考,方法指针也是指针,既然方法能够返回其他指针,当然也可以返回方法指针。

  方法指针的类型就是去掉指针名称,int(*)(int)。从人的角度思考,返回方法指针的方法应该是 int(*)(int) H(int)。但是,我们应该从编译器的角度思考,编译器首先找到方法名,去掉方法名和形参表,剩下的就是返回类型了。因此,实际的写法是int (* H(int)) (int)。

  为了便以理解,使用

  typedef int(*PF)(int);

  PF H (int)。

5、接着考虑,方法指针数组的声明,从人的角度思考,应该是int(*) (int) a[10]; 实际上是 int(* a[10])(int)。

6、接着考虑,指向数组的指针,从人的角度思考,应该是int[10] *p; 实际上是int (*p)[10]。

7、可以认为,编译器并不是从左到右读取声明,而是声明的对象放在了中间,并用括号括起来,保证优先级最高,去掉名称,剩下的就是类型。

8、特别注意,复杂的声明是非常糟糕的编码风格,严重影响代码的可读性,应该尽量避免,可以使用typedef。

转载于:https://www.cnblogs.com/nzbbody/p/3560062.html

C++ 中复杂的声明相关推荐

  1. c语言中很多中括号由外向里,浅谈C语言中的类型声明

    文章目录 [隐藏] 新年第一更!之前群友问了一个 C语言 问题,即int(*(*p)()).int *(*p)()和int *(*p())的区别在哪里.确实,有时C语言的类型声明是很魔性的,看着也很令 ...

  2. [转] SQL Server中变量的声明和使用方法

    原文地址 SQL Server中变量的声明和使用方法 声明局部变量语法: DECLARE @variable_name DataType 其中 variable_name为局部变量的名称,DataTy ...

  3. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,终于把心中的疑惑彻底解开了.现在记录下我对指针声明的理解,顺便说下如何在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  4. 类中成员函数声明后面的const的含义

    这个const一般是对类中成员函数属性的声明,但这个声明怪怪的,只能放在函数声明的尾部,大概是因为其它地方都已经被占用了.这个声明表示这个函数不会修改类中的任何数据成员.如果在编写const成员函数时 ...

  5. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )

    文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...

  6. php中函数声明的方法,PHP中的函数声明与使用

    函数 1.  函数名是标识符之一,只能有字母数字下划线,开头不能是数字: 函数名的命名,必须符合"小驼峰法则"FUNC(),func(),Func(); 函数名不区分大小写; 函数 ...

  7. 在c语言中函数的定义变量的值为,变量定义(C语言中变量的声明和定义)

    变量定义(C语言中变量的声明和定义),哪吒游戏网给大家带来详细的变量定义(C语言中变量的声明和定义)介绍,大家可以阅读一下,希望这篇变量定义(C语言中变量的声明和定义)可以给你带来参考价值. 3.函数 ...

  8. C++ 在派生类中使用using声明改变基类成员的可访问性

    通过在类的内部使用using声明语句 , 我们可以将该类的直接或间接基类中的任何可访问成员标记出来 (只限于非私有成员) .using声明语句中名字的访问权限由该using声明语句之前的访问说明符来决 ...

  9. 关于某些同行盗用“jeecg”关键词在百度竞价中推广的声明

    关于某些同行盗用"jeecg"关键词在百度竞价中推广的声明 近段时间以来,我司发现有某些同行企业借助"jeecg"品牌的知名度,盗用"jeecg&qu ...

  10. ES5和ES6中的变量声明提升

    ES5和ES6中的变量声明提升 Example1: a=2; var a; console.log( a ); //结果为2 Example2: console.log( a ); //结果是unde ...

最新文章

  1. AI产品经理必修——揭开算法的面纱(余弦定理)
  2. Java算法练习——正则表达式匹配
  3. 云计算对中小企业的大冲击
  4. saltstack批量修改root密码
  5. 源 arm_arm和X86处理器性能简单测试
  6. 按钮点击_如何设置微信小程序按钮点击事件?
  7. html留言回复评论页面模板,HTML5实现留言和回复的页面样式
  8. python仿真搭建_mock搭建——python——搭建一个简单的mock服务——简单版本
  9. 《暖冬里的事儿 ——春假散札》
  10. java 文件md5校验_Java 自带MD5 校验文件
  11. 拉格朗日方程的三种推导方法之基于汉密顿原理推导
  12. 微信订阅号之——网页授权
  13. 敏捷下的scrim、xp、3355、TDD、BDD、CI、DI及四个仪式、十二原则汇总
  14. Vuforia开发问题记录(四)------- Vuforia AR项目在小米8 SE上运行黑屏
  15. springbooot学习记录
  16. 58同城亿级流量架构演进
  17. ECC功能简述及其原理
  18. 我的世界服务器java进不去_萌新求助 mc服务器进不去
  19. 大龄计算机考研 考研帮,过了40还想考研吗?大龄研究生讲述真实感受
  20. 华为linux改ip地址,ubuntu9.10校园网上网配置详细教程(华为h3c,mac地址绑定)

热门文章

  1. 你真的懂点击率(CTR)建模吗?
  2. spd耗材管理流程图_国药器械山东公司助力济宁医学院附属医院SPD项目成功启动...
  3. oracle v$ 表,【学习笔记】Oralce视图 查找分析V$PARAMETER视图的基表
  4. Java show两个整数加减_怎么样用java编写界面实现两个数的加法运算
  5. mysql添加外键约束失败cannot add foreign key constraint
  6. linux应用之--网络编程
  7. 玩转mini2440开发板之【如何设置开发板的网络参数】
  8. [机器学习]超参数优化算法-SuccessiveHalving与Hyperband
  9. C++中const迭代器 和 const_iterator的区别
  10. windows中 修改某种文件图标 的方法 (备忘)