指针相关的笔试题

声明声明的描述
int(*abc)[6]指向“int型数组”的指针
int **(*abc[6])( )指向“返回值为int型指针的指针的函数”的指针的数组
int **abc[ ]int 型指针的指针数组
int *(*abc)[ ]指向int型指针数组的指针
int * (*abc( ))( )返回值为“返回值为int型指针的函数指针”的函数
int (*(*abc)(int a))(int a)指向返回值为“指向返回值为int的函数指针”的函数指针
int (**(*abc)(int a))(int a)指向函数返回值为“返回值为int的函数指针的指针”的函数指针
int (*(*abc)(int a))[6]指向函数返回值为“指向int型数组的指针”的函数指针
int ((*(*abc)(int a))[6])(int a)指向函数返回值为“指向‘返回值为int型指针的函数指针’的数组的指针”的函数指针

具体解析方法

  1. int abc(int a)

  2. int abc[3]

  3. int **abc(int a)

  4. int (*abc)(int a)

  5. int (*abc)[6]

  6. int *abc(int a)

  7. int **(*abc[6])(int a)

  8. int **abc[6]

  9. int *(*abc)[6]

  10. int *(*abc(int a))(int a)

  11. int (*(*abc)(int a))(int a)

  12. int (**(*abc)(int a))(int a)

  13. int (*(*abc)(int a))[6]

  14. int ((*(*abc)(int a))[6])(int a)

解答

  1.  返回值为int的函数。
    
  2.  int 型数组
    
  3.  返回值为“int 型指针的指针”的函数。()的优先级高于*(这里指右边的*),所以abc先和()结合,即abc(int a),说明abc是一个函数(这是abc的真面目)。那么函数的返回值是什么类型的呢?abc(int a)接着和*(右边的*)结合,即*abc(int a),说明函数abc的返回值是指针类型的?那是什么类型的指针呢?从int  *(*abc(int a))可以看出,abc(int a)的返回值是指向int型指针的指针。
    
  4.  指向函数返回值为int的函数指针。由(*abc)可以看出,*先与abc结合,所以abc是一个指针(而不是函数),该指针指向形参为int a,返回值为int的函数。
    
  5.  指向“int 型数组”的指针。从(*abc)可以看出,abc是一个指针,那是什么类型的指针呢?(*abc)和后面的[]结合,即(*abc)[6],所以abc指向一个数组,那么数组元素的类型呢?从int (*abc)[6]可以看出,数组元素的类型为int型。再分析一遍,指针abc指向一个数组,数组的元素类型为int型,即abc是一个指向int型数组的指针。
    
  6.  返回值为“int型指针”的函数。由于()的优先级高于*,所以abc首先和()结合,即abc(int a),由此看出abc是一个函数(而不是指针),那么该函数的返回值是什么类型的呢?abc(int a)和前面的*结合,即*abc(int a),可以看出,函数abc的返回值是指针类型的。接着,*abc(int a)和int结合,即int *abc(int a)。再分析一遍,abc是一个函数,返回值为int型指针。
    
  7.  元素为指向“返回值为int型指针的指针的函数”的指针数组。由于[]的优先级高于*,所以abc先和[]结合,即abc[6],所以abc是一个数组。然后abc[6]和*结合,即*abc[6],说明数组abc的每个元素是指针,且该指针指向形参为int a,返回值为int指针的指针的函数。
    
  8.  int型指针的指针数组。[]的优先级高于*,所以abc首先和[]结合,即abc[],所以abc是一个数组,然后abc[6]和*(右边的*)结合,即*abc[6],可以看出数组abc的每个元素为指针。那么该指针指向什么呢?接着,*abc[6]和左边的*结合(*的结合顺序为从右到左),即*(*abc[6]),所以数组abc的每个元素为指针,且该指针指向int型的指针,也就是说,数组abc的每个元素为int型的指针的指针。
    
  9.  指向“int型指针数组”的指针。由于()的优先级高于[],所以abc和*先结合,即*abc,所以abc是一个指针(这是本质)。而下标[]的优先级高于*,所以*abc然后和[]结合,即(*abc)[6],可以看出,abc指向的是一个数组,数组的元素类型为int *,即int型指针。
    
  10. 返回值为“指向返回值为int型指针的函数指针”的函数。是不是有些头晕呢?没关系,不管你头晕不晕,我都会让你清醒的。由于()的优先级高于*,所以abc先和()结合,即abc(int a),说明abc是个函数,这是本质。然后abc(int a)和前面的结合,即abc(int a),说明函数的返回值为指针,那么该指针(ptr1)指向什么呢?int *(*abc(int a))(int a),看到红色的部分了吗?可以看出,ptr1指向一个函数,该函数形参为int a,返回值为int型指针。最后我们再分析一遍,abc(int a)函数的返回值是一个指针,该指针指向形参为int a,返回值为int型指针的函数。

  11. 指向返回值为“指向返回值为int的函数指针”的函数指针。从(abc)(int a)可以看出,abc是一个函数指针,那么该函数指针所指的函数(f)返回值是什么类型的呢?从abc)(int a)可以看出,函数f的返回值为指针类型(ptr_type),那ptr_type到底是什么类型的呢(指向int,char,还是函数)?从int ((*abc)(int a))(int a)可以看出,ptr_type是函数指针,所指向的函数形参为(int a),返回值为int型。

  12. 指向函数返回值为“返回值为int的函数指针的指针”的函数指针。分析参考11。

  13. 指向函数返回值为“指向int型数组的指针”的函数指针。abc先和结合,即abc,abc是一个指针。接着,*abc和()结合,即(abc)(int a),abc指向的是一个函数,即abc是一个函数指针。那么abc指向的函数返回值是什么类型呢?(abc)(int a)接着和前面的结合,即abc)(int a),说明abc所指向的函数的返回值是一个指针,那么这个指针(ptr)指向哪儿呢?接着往下看,((*abc)(int a))[6],ptr指向一个数组,数组的元素类型为int型。再分析一遍,函数指针abc所指的函数返回值是一个指针,该指针指向int型的数组。

  14. 指向函数返回值为“指向‘返回值为int型指针的函数指针’的数组的指针”的函数指针。看到这个表达式,你是不是头有点大了?如果你的answer是yes,那么恭喜你,说明你还是个正常的地球人。哈哈!开个玩笑。从(abc)(int a)可以看出,abc是一个函数指针,即指针abc指向的是一个函数(f)。那么函数f的返回值是什么类型的呢?从abc)(int a)可以看出,函数f的返回值类型是指针型(ptr)的,那么这个指针指向哪里呢?从(abc)(int a))[6]可以看出,ptr指向一个数组,那么该数组(arr)的元素是什么类型的呢?从(*(abc)(int a))[6],arr的数组的元素类型为指针类型(ptr_type),那是什么类型的是指针呢(指向int,char,还是函数)?从int ((*abc)(int a))[6])(int a)可以看出,ptr_type是指向函数的指针,该函数的形参为int a,返回值为int型指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值