数组指针类型与函数指针类型
2019-10-02 12:10:46
本文总阅读量次
由于数组类型与函数类型的定义方法很类似,因此放到一起。
数组指针
数组类型的定义
1 | typedef int (myArrayType)[10]; |
输出结果:

数组指针类型的定义
1 | typedef int(*myPArrayType)[10]; |
输出结果:

myPArrayType
是数组的地址,而a
是数组首元素的地址,因此myPArrayType
相当于一个二级指针。
说到数组指针就不得不提一下指针数组,初学指针与数组时很容易混淆这两个概念,但其实也很好理解。数组指针可以念成数组的指针,也就是说本质上是一个指针,只是该指针指向的是一个数组罢了,也就是上面这个例子。而指针数组又可以念成指针的数组,顾名思义本质上是一个数组,只不过数组的元素是指针。
另外值得注意的是a+1
与&a+1
完全不同,指针+1
的步长取决于指针所指的数据类型,a
指的是int
类型因此向后移动四个字节,而&a
指向的是一个数组因此向后移动四十个字节。
函数指针
通过函数类型定义函数指针
1 | typedef int (myFuncType)(int); |
输出结果:

直接定义函数指针类型
1 | typedef int (*myPFuncType)(int); |
输出结果:
