博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针理解——复杂指针解析
阅读量:6962 次
发布时间:2019-06-27

本文共 924 字,大约阅读时间需要 3 分钟。

右左法则

首先从最里面的圆括号看起,然后往右看,再往左看,每当遇到圆括号时,就应该调转阅读方向,一旦解析完圆括号里面的所有东西,就跳出圆括号,重复这个过程直到整个声明解析完毕。

举例:int * (* (*fun) (int *)) [10]

首先,fun是一个指针,因为他先跟*(绿色色)结合。fun指向的是一个函数,该函数特点是有一个整形指针做参数,并且返回值仍然是一个指针(品红色)。其返回值指针指向的内容是个数组。所指向的数组有10个元素,每个元素都是int *类型。

练习:

用变量a给出下面的定义

a)一个整型数
  int a;

b)一个指向整型数的指针

  int*a

c)一个指向指针的指针,它指向的指针是指向一个整型数

  int**a

d)一个有10个整型数的数组

  int a[l0]
e)一个有10个指针的数组,该指针是指向一个整型数的。
  int *a[l0]
f)一个指向有10个整型数数组的指针

  int(*a)[l0]

g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数

  int(*a)(int)

h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

  int(*a[l0])(int)

最后一个例子

(*(void(*)())0)()

假如有代码void(*pfun)()  我们很容易知道这是个函数指针。那么该函数指针的类型是void(*)()

接下来把0强制胡转换成void(*)()这种类型,就是(void(*pfun)())0去掉pfun,变成(void(*)())0。本来就是一个普通数字0,现在被强制转换成函数指针,摇身一变成某个函数的地址。

假如有代码void(*pfun)() ,pfun是个函数指针。取得该指针所指向的函数就能调用函数,即(*pfun)()

同理(void(*)())0这个函数指针,*取该指针指向的函数*((void(*)())0),但是要调用指向的函数,还要再阔上()。即(*(void(*)())0)()

转载于:https://www.cnblogs.com/kelamoyujuzhen/p/9351499.html

你可能感兴趣的文章
React Hooks
查看>>
关于抢购秒杀的实现思路与事例代码
查看>>
ttlsa教程系列之MySQL---mysql数据库监控
查看>>
centos安装pypy(含pypy下载地址)
查看>>
spring 的那些 processors
查看>>
使用kickstart服务全自动安装RHEL7.0系统
查看>>
测试防盗链
查看>>
关于无法启动Task Scheduler 服务的通用解决方案
查看>>
dns解析及安全
查看>>
详解TCP/IP协议的含义及三个参数
查看>>
***的免杀技术
查看>>
Java 图像的模糊与锐化
查看>>
filter实际运用 appScan扫描漏洞处理
查看>>
原创:keil各种错误原因和解决方案--不间断更新
查看>>
cisco 2950使用经验。
查看>>
7月10日垃圾邮件报告:广东居十大垃圾邮件发送地之首
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
全面剖析 Knative Eventing 0.6 版本新特性
查看>>
流,用声明性的方式处理数据集 - 读《Java 8实战》
查看>>
【翻译】How To Become A Blockchain Developer: Crash Course! 区块链开发指南!
查看>>