您的位置:首页 > 其它

数组指针、指针数组、函数指针、函数指针数组、函数指针的数组的指针

2018-02-19 18:32 281 查看
指针数组:
正如可以创建整型数组,也可以创建指针数组。指针数组是数组,是一个存放指针的数组。请看下列例子:
int *arr1[10];
char **arr2[10];两个都是指针数组。
数组指针:
数组也是一种类型,也可以创建数组指针。数组指针是指针,是指向数组的指针。请看下列例子:
int (*p)[10];是数组指针,是一个指向10个整型元素数组的指针。
那如何区别数组指针和指针数组呢?
这里有一个小技巧:按照优先级判断是数组还是指针。如int *p[10];[ ]的优先级高,所以是指针数组。int (*p)[10],这里*优先级高,因为p先和*结合,所以是数组指针。
那数组的地址如何来存储?请看下列例子:
int arr[10]={0};
int *p1=&arr;和int (*p2)[10]=&arr;两个语句那个正确?
&arr是数组指针,*p1是指针,而(*p2)[10]是数组指针,由类型判断是第二个语句正确。
我们对数组指针和指针数组有一定了解,接下来,用一个例子测试一下自己吧!
判断下列语句是指针数组还是数组指针:
int p1[5]; ---->数组
int *p2[10];----->指针数组
int (*p3)[10];----->数组指针
int (*p3[10])[5];---->数组指针数组
int (*(*p3)[10]) [5];----->数组指针数组指针
只要我们知道谁的优先级高,就是该类型,就可以轻松判断各种类型。
函数指针:
我们已经了解数组指针,函数指针和数组指针类似,我们可以将函数指针理解为函数的地址。请看下列例子:
void *fun1( );------>函数,返回值是void *
void (*fun2)( );------>函数指针。fun2线和*结合,说明fun2是指针,指针指向的是一个函数,函数无参数,返回值是void
fun和&fun有什么不同吗?看下列例子:



函数名和&函数名都是函数的地址。
接下来,我们看两个较复杂的例子强化下知识吧~
(*(void (*)( ) )0)( );----->void (*)( )是函数指针---->(void (*)( ) )0 是指针将0号地址强转为函数指针---->(*(void (*)( ) )0)是解引用,将4个字节内容拿出---->(*(void (*)( ) )0)( )指调用0号地址所对应的函数
void (*fun(int,void(*)(int) ) )(int);简化为:
typedef   void(*p_fun)int;
p_fun    fun(int,void(*)(int) ) ; 
fun(int,void(*)(int) ) fun函数两个参数,一个类型为int,一个是函数指针;

void (*fun(int,void(*)(int) ) )(int)指fun函数返回值是函数指针。

函数指针数组:
数组是一个存放相同类型数据的存储空间,函数指针数组是指函数的地址存放在数组中,函数指针数组如下定义:
int (*p[10])( );---->函数指针数组,p先和[10]结合,所以是数组,( )里指函数的参数
int *p[10]( );--->不是函数指针数组,返回值是int *
函数指针数组的应用:计算器, 博客链接-->http://blog.csdn.net/sophia__yu/article/details/79357379#
指向函数指针数组的指针:
指向函数指针数组的指针是指一个指针,这个指针指向一个数组,这个数组里存的都是函数指针。



以上就是对数组指针、指针数组、函数指针、函数指针数组、函数指针的数组的指针的总结,函数指针数组的应用在链接中。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c基础  指针
相关文章推荐