高级指针
来源:互联网 发布:淘宝刷好评买家封号 编辑:程序博客网 时间:2024/04/23 20:49
1.指针数组
int *p[10];
这就是指针数组,首先它是一个数组,这个数组里面装了10个指针。
2.数组指针 int (*p)[10];
这是数组指针,它是一个指针,一个指向数组首元素的指针。
区别和理解:
很多初学者对这两个东西的概念弄的不是很清楚,要是学了一阵子又很久不学,下次再看见,又不知道哪个是所以哪个了,所以要想真正记住他们,我们还必须理解记忆。
这两个表达式中,唯一的不同就是数组指针多了个(),这个括号的作用大家都知道,它能改变优先级。
1).如果不加括号, 它就是指针数组。
* 和[]的优先级就会不一样,[]的优先级要高于 * ,所以p先和[]结合,结合过后它就是p[],这明显就是一个数组,之后再结合 * ,表示数组的元素类型是指针。其实我们应该把int和 * 放在一起看,即int * ,它表示数组的元素类型是整型指针。
2).如果加上括号,它就是数组指针。
() 使 * 和p先结合,所以它是一个指针,再结合[],表示指向数组的指针,int修饰指针为整型指针。
3).指针数组是数组,数组指针是指针。 * 和 [] 谁的优先级高,就是什么类型。
3.函数指针
函数指针是指向函数的指针变量。 因而”函数指针”本身首先应是指针变量,只不过该指针变量指向函数。
这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。
函数指针有两个用途:调用函数和做函数的参数。
4.函数指针数组
int (*p[])(int ,int);
函数指针数组是一个其元素是函数指针的数组。那么也就是说,此数据结构是是一个数组,且其元素是一个指向函数入口地址的指针。
分析:
首先,说明这是一个数组:p[]
其次,要说明其元素的数据类型是指针: *p[]
再 次,要明确这每一个数组元素是指向函数入口地址的指针:函数返回值类型 (*数组名[])()。
请注意,这里为什么要把“数组名[]”用括号扩起来呢?因为圆括号和数组说明符的优先级是等同的,如果不用圆括号把指针数组说明 表达式扩起来,根据圆括号和方括号的结合方向,那么 数组名 说明的是什么呢?是元素返回值类型为指针的函数数组。有这样的函数数祖吗?不知道。所以必须括起来,以保证数组的每一个元素是指针。
5.指向函数指针数组的指针
int (*(*p)[])(int ,int)
p先和*结合,是一个指向函数指针数组的指针变量,p中存放的是整个数组的地址。这里和数组指针一样,其类型是指针,只不过家里很多定语而已。
- 高级指针
- 高级指针
- 指针高级
- 指针高级
- 高级指针
- 高级指针
- 高级指针
- 高级指针
- 高级指针
- 高级指针
- 高级指针
- 高级指针
- 高级指针
- 高级指针话题
- 高级指针话题
- 指针高级例题
- 高级指针声明
- 指针高级运算总结
- 如何摆脱成为一个油腻的中年人
- LaTeX快速指南(一)安装LaTeX
- 基于HTML5 Canvas 实现地铁站监控
- poj 3087 Shuffle'm Up
- Visual Studio 2017 无法连接Linux服务端问题
- 高级指针
- Uicc之CatService
- iOS仿支付宝车牌号码输入键盘
- virtualenv教程
- hdu 4911 Inversion
- HDFS基于路由的Federation方案
- 分解质因数-java
- hdu 4907 Task schedule
- 【Machine Learning】模型融合之Stacking