指针函数
是指带指针的函数,本质上是一个函数,函数返回类型是某一类型的指针,其形式一般如下所示:
类型标识符 *函数名(参数列表)
函数指针
是指向函数的指针变量,本质上是一个指针变量,表示的是一个指针,它指向的是一个函数,其形式一般如下:
类型说明符 (*函数名)(参数)
例如,int(*pf)(int x),它的意思就是声明一个函数指针,而pf = func,则是将func函数的首地址赋值给指针。
引申1:数组指针和指针数组?
数组指针
就是指向数组的指针,它表示的是一个指针,它指向的是一个数组,它的重点是指针,如,int(*pa)[8]声明了一个指针,该指针指向了一个有8个int型元素的数组
指针数组
就是指针的数组,表示的是一个数组,它包含的元素是指针,它的重点是数组。如, int* pa[8]声明了一个数组,该数组的每一个元素都是int型的指针
引申2:函数模板和模板函数?
函数模板
是对一批模样相同的函数的说明描述,他不是某一个具体的函数
模板函数
是将函数模板内的“数据类型参数”具体化后得到的重载函数(就是由模板而来的函数)。
函数模板是抽象的,模板函数是具体的。
函数模板减少了程序员输入代码的工作量,是C++中功能最强的特性之一,是提高软件代码重用性的重要手段之一,一般形式如下:
template <模板类型形参表>
<返回值类型><函数名><模板函数形参表>
{
//函数体
}
其中<模板类型形参表>的类型可以是任何类型,包括基本数据类型和类类型。需要注意的是,函数模板并不是一个实实在在的函数,它是一组函数的描述,它并不能直接执行,需要实例化为模板函数后才能执行,而一旦数据类型形参实例化后,就会产生一个实实在在的模板函数。
引申3:类模板和模板类
类模板与函数模板类似,将数据类型定义为参数,描述了代码类似的部分类的集合,具体化为模板类后,可以用于生成具体的对象。类是对象的抽象,而类模板是类的抽象。
C++中引入模板类主要有以下5个方面的好处
(1)可用来创建动态增长或减小的数据结构
(2)它是类型无关的,因此具有很高的可复用性
(3)它在编译时而不是运行时检查数据类型,保证了类型安全
(4)它是平台无关的,可移植性强。
(5)可用于基本数据类型
引申4:指针常量/常量指针
指针常量
是指定义的指针只能在定义的时候初始化,之后不能改变其值。其格式为:
[数据类型][*][const][指针常量名称]
常指针的值不能改变,但是其指向的内容却可以改变
常量指针
指向常量的指针,因为常量指针指向的对象是常量,因此这个对象的值是不能够改变的。定义的格式如下:
[数据类型][const][*][常量指针名称]; 或[const][数据类型][*][常量指针名称];
需要注意的是,指针常量强调的是指针的不可改变性,而常量指针强调的是指针对其所指对象的不可改变性,它所指向的对象的值不能通过常量指针来改变。