什么是指针?关于指针的数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针的理解

我们在学习c语言中,可能遇到最难的部分就属指针了,那么什么是指针?有什么用?

首先来解释一下,指针概念:

仔计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地的值。由于通过地址能找到所需的变量单元,

地址指向该变量单元。因此,将地址形象的称为指针。

有什么用呢?举个例子,就如国家的管理,一个国家划分很多省,省又划分很多市,市又到县......一直到某个家庭,每个家都有自己的地址。

为方便管理。当然在计算机中,内存最小的一个字节,就有自己的地址,而指针就是为了方便管理用来指向某一个地址。

在c语言中,

1.  关于指针数组:

指针数组,首先明确它是数组,是一个存放指针类型的数组。

例如:int *arr[10] 这就是一个指针数组。怎么理解呢?

看图


在我们经常写main()函数里面的三个参数后面两个就是指针数组,char *argv[]   char * envp[]

2   数组指针

还是先明确数组指针指针,这里我们来比较着解释,指针数组和数组指针容易搞混,在初学阶段,

指针数组上面相信大家已经有所了解,而数组指针,比如:int (*p)[10] 就是一个数组指针

在写法上数组指针就比指针数组多了(),而是因为[]的优先级高于* 。数组指针我们来理解一下,

上图:


简单的说就是指向数组的指针。

在这里还有一点,就是arr与&arr的区别,arr表示的是数组首元素地址而&arr表示的是整个地址。

比如:int arr [10] ; arr+1; &arr+1输出地址是截然不同,arr只加了一个int ,而&arr加了整个数组的长度。

3 函数指针

如果理解了数组指针那么理解函数指针就不难,因为函数指针就像数组指针,就是指向函数的指针,但是在语法上多动注意。

例如 void (* p)() 就是一个函数指针,其中p就是函数指针变量。那么会有人疑问,void * p ()是什么,这个很早就已知道,是返回值为void * 的函数声明。。

我们来看一个小练习,

(  *  (  void  (  *  )  (  )  )  0  )();

这个题呢,是这样的,

(  void  (  *  )  (  )  )  是一个函数指针,而且加了()后面跟数字零,其实就是把零强转为函数指针类型,再解引用。

4 函数指针数组

如果理解了指针数组,这里理解起来应该不难,函数指针数组是数组,是存有函数指针的数组。

它的语法,也就叫做写法,例如:int (*p[10])();而这里的p[10]就是函数指针数组。

5 函数指针数组的指针

如果以上都已经理解,那么就很好理解函数指针数组指针,就像数组指针,这里就是指向函数指针数组的指针,怎么写呢?

也就是语法 例如:int (*(*p)[10])();这里的p就是指向函数指针数组的指针。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值