“指针数组”和“数组指针”的区别、函数指针定义及引用

来源:互联网 发布:java识别图片文字 编辑:程序博客网 时间:2024/05/16 10:32

1. 以int   *p[5],Int (*p)[5]为例子来分析。 首先要理解中文层面上来理解指针数组、数组的指针。

先分析Int *p[5], 变量p为核心,然后判断* 和[5]的优先级哪个高,谁的优先级高,p就与谁先结合,从C语言的符号优先级表可知(优先级表读者可自行百度),[]的优先级高于*,所以p与[]先结合,故p[5]为数组,再*与p[5]结合,解析为数组p 有5个变量,且每个变量的类型为指针类型,接着*p[5]再与int结合,整体解析为数组p 有5个变量,且每个变量的类型为指针类型,指针指向的类型为int,这就是我们说的指针数组。


再分析Int (*p)[5],同样的解析方式: 由里向外一层一层的解析。 由于括号的原因,(*p)中的p强制先与*结合,因此我们可以判断变量p为指针变量,指向的是一个数组,该数组有5个变量,每个变量的类型是int 。这就是我们所说的数组指针。


2.我们通过数组指针延伸到函数指针。

首先我们定义一个简单的函数指针便于大家理解: void  (*p)(void)。怎么理解这种定义呢? 跟上述的方法一样,首先p因为()的原因强制先*结合,则变量p为指针变量,指向的是一个输入参数为void ,返回类型void 的一个函数(为什么是函数呢?在c语言中规定指针后面跟在的()为函数指针)。


3.应用(为了方便,我直接在kile+ 软件仿真+ 串口打印结果),具体如下:



PS:第一张定义了一个func1函数,在函数中打印 function pointer testing 

 第二张定义一个函数指针,引用strcpy复制字符串函数,将复制后的结果打印。

阅读全文
0 0