指针数组的概念:
指针数组解释过来就是:存放指针的数组。
指针数组是一个数组,数组里面的每一个元素都是同类型的指针(地址)。我们可以类比记忆:整型数组是存放整型的数组,字符数组是存放字符的数组,那指针数组就是存放指针的数组。
如:int(*p) [10];
这就定义了一个指向含有十个int型数据的数组的指针。注意:是指向整个数组,并非数组中的单一元素。
对指针变量进行加法和减法运算时,是根据数据类型的长度来计算的。如果一个指针变量 p 指向了数组的开头,那么 p+i 就指向数组的第 i 个元素;如果 p 指向了数组的第 n 个元素,那么 p+i 就是指向第 n+i 个元素;而不管 p 指向了数组的第几个元素,p+1 总是指向下一个元素,p-1 也总是指向上一个元素。
引入数组指针后,我们就有两种方案来访问数组元素了,一种是使用下标,另外一种是使用指针。
1) 使用下标
也就是采用 arr[i] 的形式访问数组元素。如果 p 是指向数组 arr 的指针,那么也可以使用 p[i] 来访问数组元素,它等价于 arr[i]。
2) 使用指针
也就是使用 *(p+i) 的形式访问数组元素。另外数组名本身也是指针,也可以使用 *(arr+i) 来访问数组元素,它等价于 *(p+i)
3 关于数组指针的p++、*++p、(*p)++
假设 p 是指向数组 arr 中第 n 个元素的指针,那么 *p++、*++p、(*p)++ 分别是什么意思呢?
*p++ 等价于 *(p++),表示先取得第 n 个元素的值,再将 p 指向下一个元素,上面已经进行了详细讲解。
*++p 等价于 *(++p),会先进行 ++p 运算,使得 p 的值增加,指向下一个元素,整体上相当于 *(p+1),所以会获得第 n+1 个数组元素的值。
(*p)++ 就非常简单了,会先取得第 n 个元素的值,再对该元素的值加 1。假设 p 指向第 0 个元素,并且第 0 个元素的值为 99,执行完该语句后,第 0 个元素的值就会变为 100
函数指针:
1:在编写完一个函数之后,要在主函数中定义一个函数指针
2:先定义一个指向函数的指针
3:再把该指针赋值(函数的函数名即为该函数的入口地址,所以将函数的函数名赋给该函数指针)
函数指针的作用:在程序中降低程序的耦合性。