数组指针,指针数组,函数指针与指针函数

7 阅读2分钟
  1. 数组指针: 举个例子int (*p)[3]=&a,已知a是一个长度为3的数组,那么这个数组的指针的意思就是: p是一个指针,指向一个数组,而这个数组必须是有三个元素的数组,a是满足的,这个式子就是把a这个数组的首地址赋给p,这时候p的含义就变成了指向a(三个元素)的专门用来指数组的,存储数组地址的指针了。其中,[3]是不可省略的,必须在一开始就定义好这个数组指针指向的数组要有几个元素。(p先和*结合,表示是个指针)
  2. 指针数组: 这个更简单了,举个例子int *p[3]就是一个指针数组,一个包含了三个元素,且三个元素都是指针的数组,这个元素里存储的都是地址。 3.函数指针:首先,函数包含三个要素:返回值类型,函数名,函数的参数。 其中,函数名其实就是地址,是这个函数所占内存的起始地址,在调用函数时,通过这个地址来找到函数的存储区域,进而执行函数体的内容。 举个例子int (*p)(int a,int b)p就是一个数组指针,指向一个返回值为int,接收两个int参数的函数,与数组指针有异曲同工之妙。 4.指针函数:这个就简单了,指针函数就是一个函数,但是它的返回值不是int,float这些数据类型,而是这些数据类型的指针。 举个例子int* func(int a,int b),调用他时,拿到的是int类型的一个指针 5.指向指针函数的函数指针:头大了老铁,这什么东西。 举个例子:int* *p(int a,int b),他的含义是1.p是一个指针。2.这个指针指向一个函数。3.这个函数的返回值是int类型的指针。好吧有点眉目了。 这个东西还是挺有用的,但我们现在先不讲,因为我不会 主要用途:
  • 回调函数:把函数传给别的函数,让它在合适时机调用(如排序、定时器、事件触发)

  • 函数表 / 菜单跳转:用数组存多个函数,按编号直接调用,替代大量 if/else

  • 运行时动态选择函数:程序跑起来才决定调用哪个函数

  • 驱动 / 系统底层:中断处理、系统调用、钩子函数

  • C 语言模拟多态:通过函数指针实现不同行为 好吧,总有一天我会学到的。