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)就先学到这了,后续还有更多敬请期待。