指针

在了解之前 我们要先知道什么是指针,给大家截取一段百度百科:

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。

我们可以这样理解:

指针

其实,指针变量就是一个变量,用来存放地址的变量。(存放在指针中的值都能被当做地址处理)

上面我们了解到,指针变量就是一个变量。是变量就需要被定义,要定义就需要开辟空间。那么指针变量的大小是多少呢?

——在32位的机器上,地址是32个0或者1组成的二进制序列,那地址就得用4个字节的空间来保存,所以一个指针变量的大小就应该是4个字节。

——那如果在64位机器上,如果有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地址。

既然指针是变量,我们所知道的变量都是有不同的类型的:int、float、char等。所以,指针也是有类型的。

指针是一种有类型的,类型是:type+ *的 方式。

由此,只要有类型的区分,就会定出一定的规则,使得编码会更严谨。

接下来,我们看几种比较复杂的类型:

1.指针数组。

指针数组其实就是一个数组,只不过数组中的元素的类型都是指针。简单来说,就是有一个数组,它里边放的全是指针。这样的数组我们叫做指针数组。

2.数组指针。

相对于上面的指针数组,数组指针并不是数组,而是指针。这个指针所指向的内容是一个数组。简单理解:有一个指针变量(我们已经知道指针就是地址),这个变量的内容是一个数组的地址。

通过上面我们可以知道:指针是有能力指向一个数组的。那么,指针可不可以指向一个函数呢:

我们知道,函数是一个子程序,用来实现某种独立功能的代码块。一般情况下,我们通过main函数来调用所需要的函数。在汇编语言中,我们可以发现在进入到函数时是需要知道函数的入口地址的。(这里大家可以看看关于函数调用和栈帧结构的内容)

https://blog.csdn.net/lsfan0213/article/details/80280494

既然函数调用需要地址,而指针其实就是地址。所以,指针也是有能力去指向一个函数的——

这种指针就叫做函数指针。

函数指针一是一种类型,它也可以作为元素放在数组中。那么这种数组就叫做函数指针数组。

我们再想想,函数指针数组是一个数组,它肯定有地址,如果一个指针变量的内容是这个函数指针数组的地址。那这指针是什么?

没错!它就叫指向函数指针数组的指针!