数组,指针与函数之间的关系

本文详细解析了指针数组、数组指针、函数指针等概念的区别与联系,并通过实例展示了函数指针及其数组的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于数组,指针和函数的问题,先提出一组名词

  • 指针数组
  • 数组指针
  • 函数指针
  • 函数指针数组
  • 指向函数指针数组的指针

那么他们之间的联系和区别是什么呢,我们来一个个的分析:

1. 指针数组

 指针数组:一个存放指针的数组,首先它是一个数组,而它里面的内容是一个个的指针,例如 :
int *p[5];
p是一个可以存放5个指向int型指针的数组,它的结构如图所示:

指针数组

2.数组指针

数组指针:一个指向数组的指针,本身是一个指针,它的内容指向一个数组,例如:
int (*p)[5];
p是一个指向一维数组的指针,结构如图所示:

数组指针

在这里要强调的是如何区分指针数组和数组指针,就看要运算符的优先级了,因为 [ ] 的优先级高于 * ,在 (int * p[5]) 中p先和 [ ] 结合,所以p是一个数组;相对的因为加上‘()’的(int (* p)[5])p先和 * 结合,因此p在这里是一个指针

3.函数指针

函数指针:一个可以指向函数的指针,例如:
void (*p)();
这里p是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void
关于函数指针的用法,例如:
int fun(int a,int b)
{
    return a+b;
}

int (*p)(int, int) = fun;
这里我们定义了一个函数fun同时定义了一个函数指针指向fun,那么我们可以怎么调用呢:
*p)(10, 20);
p(10, 20);
这两种调用方法都是可以的,其结果与直接调用fun(10, 20),结果一样。

4.函数指针数组

就如之前学习的指针数组一样,函数指针数组也是一个数组,只不过它里面的内容是一个个的函数指针,例如:
int (*p[5])()
p先和[ ]结合,说明p是一个数组,内容是 int (*)()类型的函数指针,结构如图:

函数指针数组

5.指向函数指针数组的指针

顾名思义,他就是一个指针,而它指向的内容是一个函数指针数组,例如
void test(const char* str)
{
    printf("%s\n", str);
}
int main()
{
    //函数指针pfun
    void(*pfun)(const char*) = test;
    //函数指针的数组pfunArr
    void(*pfunArr[5])(const char* str);
    pfunArr[0] = test;
    //指向函数指针数组pfunArr的指针ppfunArr
    void(*(*ppfunArr)[10])(const char*) = &pfunArr;
    return 0;
}
ppfunArr就是一个指向函数指针数组的指针,它的内容存放的是函数指针的数组pfunArr的地址,结构如下:

函数数组的指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值