对指针的一些理解(3)

1、字符指针变量

字符指针的形式为char*类型

而字符指针变量一般有两种使用方法

需要注意的是这里面的ch2只存放了字符串"abcdefgh"里面的首元素地址a的地址。

2、数组指针变量

要了解数组指针变量,我们要先不要搞混指针数组和数组指针这两者。

我们之前所学的是指针数组,实际上来讲,它就是一个数组,而数组指针的话,实际上来讲,它是一个指针。

整形指针int *p,表示为存储的是一个整型类型的地址,指向的整型类型的指针。

同理可得,整型数组指针存储的是一个数组的地址,是一个能够指向整型数组类型的指针。

例如:int (*p)[10] 我们来解读一下这个数组指针,首先说明数组指针变量为p,然后它指向的数组长度为10,指向的的数组类型为int整型数组。

注意:[]的优先级要高于*号,所以要加上()来保证p于*进行结合,不然就变成了指针数组了。

数组指针怎么初始化

这里我们先来看看数组指针的地址是什么样的

可以看到arr的地址与p的地址是一样的

3、二维数组传参的本质

这里我们可以看到实参是arr,而形参的形式是个二维数组的形式,那么形参的形式,除了这种二维数组的形式还有别的吗?当然有,这时候我们就要用到我们学到数组指针了。

这里就可以看到我们的形参写成了数组指针的形式了,而形参用来int (*p)[6]这个p指的是第几行的地址,而[6]指的是这行的地址有多少个元素,而第两百行的时候,这里面的p+i指的就是第i+1行,而+j指的就是第j+1个元素。

总的来说,二维数组传参的话,传的是数组首行的地址,而不是数组的第一个元素的地址。数组传参时,形参可以写成二维数组的形式,也可以写成数组指针的形式。

4、函数指针变量的创建

经过前面的了解,我们应该了解,函数指针变量里面应该存放的是函数的地址,需要时,可以通过地址来调用。

这里我们先来查看一下函数指针的地址

这里我们可以看到,两种方式表示的地址是一样的,这也可以说明,函数名其实是等价于函数的地址的.

函数指针变量的形式就是和220行一样的了,接下来我们就来开始去进行调用函数指针了。

很明显,这个233行和234行的函数指针调用都可以进行调用,这里我们来分析一下函数指针变量的形式,int (*p)(int ,int),这里面的p代表的就是函数指针变量,而int (*)(int ,int)代表就是函数指针的类型。

typedef关键字

ok啊,前面学完了函数指针变量,这里我们来学习一下typedef关键字

typedef的作用是对复杂的变量类型的名称进行重命名,进行简单化。

这里我们可以将unsigned int类型重命名为unit。而int*的类型,重命名为ptr_t.

而数组指针与函数指针就不一样了。

这里我们可以看到,对于要将数组指针和函数指针类型进行重命名的话,需要将类型名写在*号右边

5、函数指针数组

这里面,那么函数指针数组是指针呢?还是数组呢?那肯定是数组了,我们其实要判断很容易就可以判断了,看后面两个字就行了,是数组就是数组,是指针就是指针

指针数组我们学了,例如:int *arr[5]。

当然我们也可以写函数指针数组。

例如: int(*parr[5])(int,int),这里面,parr先与[]结合,然后可以理解为这个数组里面存放的是函数指针变量名,然后类型是int(*)(int ,int)。

ok了家人们,这里面我们的指针(3)就先学到这了,后续还有更多敬请期待。

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值