常量指针,指针常量;函数指针,指针函数;指针数组,数组指针 一文全解!带示例

前言:

        最近准备面试,准备把这几个乱人心智的概念一网打尽,顺便记录一下~

常量指针,指针常量:

且看下面的这些:

const int a;
int const a;
const int *a;
int* const a;
int const *a const;//带两个const的

首先可以明确的说,前两个是一样的!const int a;和int const a;都叫整形常量 基本含义就是a这个值不能变。

然后开始辨认什么是常量指针,什么是指针常量:

常量指针:

const int *a;

先出现const即常量,后出现int *a即指针,所以这个叫做:常量指针

具体含义也是按文字出现先后顺序,先出现常量,含义就是值不变地址可以变

指针常量:

int * const a;

先出现int* 即指针,后出现const即常量,所以这个叫做:指针常量

具体含义同样按照文字出现先后顺序,先出现指针,含义就是地址不变值可变

很好记忆吧,至于最后那个带两个const的,自然就是值和地址都不能变

值得一提的是,只有常量相关的是这样记忆的,后面的都是按照中文的含义修饰的,而不是按顺序。

函数指针,指针函数:

函数指针:

函数指针即“函数的指针”,本质是个指针

在笔试题经常会看到很多个括号的,有参数的一般就是函数指针了如: int (*p)(int , int)

例如有个函数是 int myfun(int x);

那用函数指针就可以指向它 

int (*p)(int ); p = &myfun;

然后调用p的时候就可以执行myfun这个函数了,这么做有什么用呢?

个人理解主要目的就是重载:p是通用函数,myfun或者xfun或者yfun是适应不同平台或者不同情景的具体实现。

例如,在uboot中,将代码重定位到DRAM中的函数,有些厂家会提供好几个函数比如从SD卡拷贝,从EMMC拷贝,从NAND FLASH拷贝等等,目的是代码重定位,但具体的实现途径可能有好几种,这种场景就适合用函数指针,可以根据实际给p指向对应的函数,从而实现使用时都是调用p,但具体是用哪个函数则按需求来定。

指针函数:

指针函数即“返回值是指针的函数”,本质上就是个函数

和int fun();char fun();没什么区别,就是返回值是指针罢了!如下

int *fun(int x);

{

    return &x;

}

指针数组,数组指针:

指针数组:

指针数组即“存的东东都是指针的一个数组”

本质就是个一维数组,只不过里面存的都是指针,它是长这样的:

int *arr[6];

很容易记哈,int *即指针,arr[6]即数组,所以叫指针数组。

数组指针:

经过上面的套路,这个应该也猜到怎么分析它了

数组指针,即“指向数组的一个指针”嘛,它长下面这样:

int (*arr)[6];

这个就没什么特别的方法即了,反正不符合指针数组(指针int* 数组arr[6])的造型,就是数组指针了~

ok了~完,继续刷题去了~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值