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

指针数组:

正如可以创建整型数组,也可以创建指针数组。指针数组是数组,是一个存放指针的数组。请看下列例子:

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#

指向函数指针数组的指针:

指向函数指针数组的指针是指一个指针,这个指针指向一个数组,这个数组里存的都是函数指针。


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








评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值