在C语言中,经常会出现一些复杂的类型声明。而大多数都是涉及到指针的类型。

那么就在这一节来集中认识一下。

首先,我们先来了解*,()和[]的组合。在看实际例子前,先来看一个重要的规则:

在做选择时,始终使[]和()的优先级大于*。举个简单的例子:

int *arr[10]。由于[]的优先级大于*。也就代表,首先这是一个含有10个元素数组,那么数组内的内容是什么呢?是int *arr。去掉类型名称,数组内的类型是int *。所以这是一个含有10个整数类型指针的数组。

同样的规则继续看:float *fp(float)。由于()的优先级大于*,所以说明这首先是一个函数,函数的返回类型是指向float类型的指针。

void (*fp)(float)。由于括号的存在,代表首先这是一个指针,这个指针指向什么呢?指向的是一个参数个数为1,类型是float的函数。

接下来看一个复杂的:(*(void(*)())0)();让我们慢慢来拆分,首先(void(*))()是一个函数指针类型的原型,因此(void(*)())0是将0转换成一个函数指针类型,那么(*(void(*)())0)也就是地址0处所在的函数,那么上面一条语句的意思也就是执行地址0处的函数。

上面的语句看起来非常复杂繁琐,因此我们在实际工作中,最好使用typedef来重新制定一下比较复杂的数据类型:

例如上面的例子:我们不妨typedef void (*functionPoint)(); 这样我们就可以非常简单的

(*(functionPoint)0)();

这样是不是容易理解了很多呢?

C语言学习笔记(16)相关推荐

  1. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  2. go get 拉取指定版本_go语言学习笔记-基础知识-3

    相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...

  3. Hadoop学习笔记—16.Pig框架学习

    Hadoop学习笔记-16.Pig框架学习 一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin, ...

  4. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

  5. C语言学习笔记-P1 初识C语言(1)

    C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...

  6. Go语言编程笔记16:存储数据

    Go语言编程笔记16:存储数据 图源:wallpapercave.com 几乎任何程序都绕不开读写数据,只不过具体的数据存储介质和方式有所不同.本篇文章将从多种数据存储方式进行探讨各种存储方式如何实现 ...

  7. R语言学习笔记(1~3)

    R语言学习笔记(1~3) 一.R语言介绍 x <- rnorm(5) 创建了一个名为x的向量对象,它包含5个来自标准正态分布的随机偏差. 1.1 注释 由符号#开头. #函数c()以向量的形式输 ...

  8. 【Go语言 · 学习笔记】

    文章目录 Go语言 · 学习笔记 一.Go包管理 1. 什么是Go语言中的包 2. 包的命名 3. main包 4. 导入包 5. 远程包导入 6. 命名导入 7. 包的init函数 二.Go开发工具 ...

  9. Lawliet|C语言学习笔记5——循环结构

    C语言学习笔记--循环结构 1.求1+2+3+-+100 #include<stdio.h> int main() {int i=1,sum=0; //定义变量i的初值为1,sum的初值为 ...

最新文章

  1. 对IsUnderPostmaster变量初步学习
  2. 学习 FPGA之前的基础知识
  3. java学习_Python基础学习教程:从0学爬虫?让爬虫满足你的好奇心
  4. linux8安装ftp服务,CentOS8.0 安装配置ftp服务器的实现方法
  5. node 常用的一些终端的命令的快捷键
  6. 绑定bindchange事件的微信小程序swiper闪烁,抖动问题解决,(将微信小程序切换到后台一段时间,再打开微信小程序,会出现疯狂循环轮播,造成抖动现象)
  7. “对症下药”:医疗行业如何实现文件分发
  8. KL散度、交叉熵与JS散度数学公式以及代码例子
  9. 麦克斯韦方程组(彩图完美解释版)
  10. 【Spark】Spark Quick Start(快速入门翻译)
  11. iphone各机型的分辨率及像素
  12. AnimationEvent 'XXX' has no receiver!
  13. Java - 加号(+)的作用
  14. JS_画中画,video视频播放器
  15. 大数据实战|怎样实现大型电商热销榜?
  16. 最好用的Android黑客应用程序和工具
  17. 互联网广告请求链路_生产环境的全链路压测应该怎么做?答案都在这里了
  18. Ubuntu 下pdf文件,编辑软件 Master pdf editor
  19. amcap测试软件,AMCap摄像头测试软件使用说明
  20. C语言程序计算星期几,怎样用c语言程序计算每月的一号是星期几

热门文章

  1. 神策数据《银行4.0数字化运营体系构建的方法与实践》正式发布
  2. 除了分析引擎 2.0,神策再发一波儿新功能!
  3. 愿只有一个Grid Layout
  4. 微软修复Windows 10周年更新KB3194496累积更新安装问题
  5. 【原创】MySQL5.7 虚拟列实现表达式索引
  6. 谈谈你期望的大学暑期实践或你亲身体验的
  7. 敏捷个人手机应用:如何使用时中法习惯
  8. Oracle exp/imp导出导入工具的使用
  9. 一个有第三方ebuild的网站
  10. typical career path for consulting industry