高级指针( 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针 )

指针数组

指针数组到底是指针还是数组呢?

指针数组是数组,是一个存放指针的数组,也就是数组元素全为指针的数组。例如,一个一维指针数组的定义:int *ptr_array[10]。

数组指针

知道指针数组是什么之后,那么数组指针是什么呢?数组指针实际上他是一个指针,我们常见的整型指针:int *p 这是一个能够指向整型数据的指针,浮点型指针:float *p 这是一个能够指向浮点型数据的指针,那么数组指针就很容易理解了数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。 看一个简单的数组指针 int (*p)【10】;这里p先和*进行结合,那就说明p是一个指针变量,然后指着指向的是一个大小为10个整型数据的数据,所以p是一个指针,它指向了一个数组,就是我们所说的数组指针。(这里要特别的注意一下【 】的优先级是要高于*号的,所以必须加上()来保证p和*先去结合。)

 但是这个数组指针到底有什么用处呢?在我目前看来我认为数组指针的最大用处就是来进行传参。不知道学了更多知识之后对这个有没有更深层次的见解。

函数指针是指向函数的指针变量 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数

#include<stdio.h>

int max(int x,int y){return (x>y? x:y);}

int main()

{

    int (*ptr)(intint);

    int a, b, c;

    ptr = max;

    scanf("%d%d", &a, &b);

    c = (*ptr)(a,b);

    printf("a=%d, b=%d, max=%d", a, b, c);

    return 0;

}

这是一个用函数指针来调用函数的程序,就是用函数指针来代替函数名对函数进行一个调用。

函数指针数组

之前已经介绍过指针数组,这里的函数指针数组就很容易进行理解了,函数指针数组也是一个数组,不过这个数组中存储的就是函数的地址,那么函数指针数组我们使用的话如果进行定义呢?

int (*parr1[10])() 在这里parr1先和【】进行一个结合,说明parr1是一个数组,那这个数组的内容是什么呢?是int(*)()类型的函数指针,那么函数指针数组的作用是什么呢?最常见的就是我们之前所编写的计算器的程序,不同的运算法则需要不同的函数来进行完成,所以,使用函数指针数组的话程序看起来相对的简单明了。

最后一个我们介绍的就是指向函数指针数组的指针,通过名字就可以确定指向函数指针数组的指针明显就是一个指针,这个指针指向的是一个数组,这个数组中的元素都是函数指针

Void (*pfun0(const char *)=test,这里的pfun是一个函数指针指向的就是函数test,然后定义void (*pfunarr【5】)(const char * str)这里是指向函数指针数组pfunarr,

pfunarr【0】=test

Void(*(*ppfunarr)[10])(const char *)=&pfunarr;

这里指向函数指针数组pfunarr的指针ppfunarr

这篇博客的介绍就说到这里,只是对这些定义的一个简单的概念讲解, 高级指针还有一些其他的内容我会在下次博客进行简单的介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值