指针数组、数组指针和函数指针

马谦马谦马谦 C/C++评论142字数 994阅读 3 分 18 秒阅读模式

以下数据声明都代表什么含义:

float(**def)[10]; double*(*gh)[10]; double(*f[10])();

int*((*b)[10]); long (*fun)int; int (*(*f)(int, int))(int);

一道很小心的面试题,主要考了指针数组数组指针以及函数指针的概念。

一、数组指针

数组指针是一个指向数组的指针,用它代替数组进行操作,它的声明形式为:

此时 p 就指向了数组 a,通过 p 就可以操作 a 数组。例如以下代码就会输出 2 3

二、指针数组

指针数组的本质是一个数组,它的每一个元素都是指针。它的声明形式为:

因为 []的优先级高于*, 所以 p 先和 []组合成数组,然后每一个元素都是 int*类型。

p 中的每个元素都是一个指向 int 类型元素的地址:

二、函数指针

函数指针是一个指向函数的指针,通过它间接操作函数,它的声明形式为:

例如

首先定义一个函数 compare 用作比较 a 和 b 的大小,然后定义一个函数指针 pf 指向 compare 函数。

使用 pf 即可完成比较功能,函数输出 1true

四、解析

1. float(**def)[10]

def 是一个二维数组指针,它指向一个数组指针的地址。

2. double*(*gh)[10]

gh 是一个数组指针,它的每一个元素都是 double*类型。

3. double(*f[10])()

f 是一个数组指针,它的每一个元素都是函数指针,指向一个没有参数并且返回值为 double 类型的函数。

4. int*((*b)[10])

等价于 int* (*b[10]),即 b 是一个数组指针,元素类型为 int*

5. long(*fun)(int)

fun 是一个函数指针

6. int(*(*f)(int, int))(int)

f 是一个函数指针,形参为 (int, int),返回值也是一个函数指针,形参为 (int),返回一个 int 类型的元素。

  最后更新:2018-5-4
马谦马谦马谦
  • 本文由 马谦马谦马谦 发表于 2018 年 4 月 7 日 19:50:27
  • 转载请务必保留本文链接:https://www.dyxmq.cn/program/code/c-cpp/the-announce-of-point-and-function.html
C/C++中struct和class的区别 C/C++

C/C++中 struct 和 class 的区别

一、 class 和 struct 的区别 C++中 class 和 struct 的区别: 继承权限,struct 的默认继承权限为 public,class 的默认继承权限为 private 。 访问权限,struct 的默...
指针和引用的区别 C/C++

指针和引用的区别

区别: 指针是一个变量类型,引用只是一个变量别名。 指针可以不用初始化,引用必须初始化。 指针可以指向空地址,引用不能指向空。 指针初始化后可以修改,引用不能修改。 其他: 引用本质上也是一个指针,内...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证