C语言复杂定义的示例
来源:互联网 发布:tiny core linux 7.1 编辑:程序博客网 时间:2024/05/10 23:21
用变量a如下的定义
(1) int *a[10];
//定义的是一个有十个元素的数组,该数组的数组元素是指针,指针指向的是int型变量
(2)int (*a)[10];
//定义的是一个指针变量,该指针指向有10个int类型变量的数组
(3)int(*a)(int);
//函数指针,指向有一个int型参数并且返回值类型也为int的函数
函数指针:是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。
函数指针的声明方法为:
返回值类型 ( *指针变量名) ([形参列表]);
注1:“返回值类型”说明函数的返回类型,“(指针变量名)”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /*声明一个函数 */
int (*f) (int x); /*声明一个函数指针 */
f=func; /*将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
(4) int (*a[10]) (int );
//函数指针数组,一个有10个指针的数组,指针指向一个函数,该函数有一个
//整形参数参数,并且返回一个整形数
关于函数指针数组的定义方法,有两种:一种是标准的方法;一种是蒙骗法。
第一种,标准方法:
{
分析:函数指针数组是一个其元素是函数指针的数组。那么也就是说,此数据结构是是一个数组,且其元素是一个指向函数入口地址的指针。
根据分析:首先说明是一个数组:数组名[]
其次,要说明其元素的数据类型指针:*数组名[].
再次,要明确这每一个数组元素是指向函数入口地址的指针:函数返回值类型 (*数组名[])().请注意,这里为什么要把“*数组名[]”用括号扩起来呢?因为圆括号和数组说明符的优先级是等同的,如果不用圆括号把指针数组说明表达式扩起来,根据圆括号和方括号的结合方向,那么*数组名[]()说明的是什么呢?是元素返回值类型为指针的函数数组。有这样的函数数祖吗?不知道。所以必须括起来,以保证数组的每一个元素是指针。
}
- C语言复杂定义的示例
- C语言中变量的复杂声明和定义
- C语言复杂定义的读法(右左法则)
- 解析c语言中复杂的指针定义
- 语言定义的其他示例
- C语言的复杂声明
- 复杂的C 语言声明
- C语言的复杂声明
- C语言中typedef的用法之简化复杂的定义
- 解读C语言中函数指针数组构成的复杂定义
- C--如何定义复杂的类型声明
- C--如何定义复杂的类型声明
- C--如何定义复杂的类型声明
- 如何阅读复杂的C定义/声明
- 如何阅读复杂的C定义/声明
- 复杂表达式解释器 c语言复杂指针定义在线解释 正则在线解释
- Go 语言变量的定义、用法、示例
- C语言复杂声明的解析
- 快速解读GC日志
- 排查logstash2.4升级到5.0版本后kafka不兼容问题
- 升级sdk导致打开eclipse出现this Android sdk requires Android developer toolkit version 22.6.2 or above
- 安装ODTwithODAC1020221到98%出错gacutil.exe
- 弧度制转化
- C语言复杂定义的示例
- Android 字体的展开与收缩
- spring中通过静态工厂方法获取bean实例化对象
- java一一些经典技术问题(不定期更新)
- 第十二周项目1-图基本算法库
- 301. Remove Invalid Parentheses
- LightOJ-2991-线段树
- 获取select下拉框选中元素的值
- Java基础--数据类型,运算符,程序控制语句