我们都知道c语言中指针是用来储存地址的,我将其分为两类——普通指针和复杂指针(这只是我个人的见解),其中普通指针如整形指针、浮点型指针、结构体指针等写法简单的指针,复杂指针如数组指针,函数指针等写法较复杂的指针。接下来我将展开说明。
一.普通指针(以整形指针为例)
1.整形指针(int*p)顾名思义就是储存整型变量地址的指针,其中int是指针指向的对象的类型,*代表p是一个指针变量,p是变量名。用法如下:
printf中的*是解引用操作符,*指针变量就可获得地址中存储的值,因pa中存了整型变量a的地址所以*pa和a代表的是一个值。
浮点型指针和结构体指针与整形指针用法相似,不再做过多说明。
二.复杂指针
1.数组指针即指向数组的指针(1)一维数组指针 如下例:
这里要说明一下:数组指针不像数组一样[]中的值可以省略,数组指针[]中必须是元素个数,因为[]也是其类型的组成部分。
pa为数组指针变量,int(*)[5]为指针变量类型。
(2)二维数组指针 如下例:
补充:1.在c语言中除了&数组名和sizeof(数组名)之外数组名代表首元素地址。二维数组的首元素是第一行的一维数组,其每一行是一个元素。
这就是一个二维数组首元素的例子
2.指针类型决定了在接引用时能访问的空间大小和在加减整数时的步长。
这两点补充在指针的学习中至关重要。
2.函数指针即指向函数的指针 如下例:函数指针这里要知道的是函数名和&函数名都代表函数的地址。
pA代表函数指针变量,int(*)(int,int)是函数指针类型。
拓展一下:函数指针数组(可通过函数指针数组实现转移表)如下图:
typedef关键字对指针进行类型重定义:1.对普通指针如:typedef int* pi;现在pi和int*等价
2.对复杂指针如:typedef int(*p)[5];现在p和int(*)[5]等价,typedef int(*p)(int,int);现在p和int(*)(int,int)等价。
OK,指针的相关内容我就说完了,有什么不足的地方可以评论和我说。最后以一道题结束,我会把答案放在评论区也欢迎大家把自己答案放在评论区。