如果一个数组的每个元素均为指针类型,则称该数组为指针数组。指针数组的所有元素都可视为指针变量,并且这些指针变量指向相同类型的数据。指针数组声明的一般形式为:
类型名*数组名[数组长度];
其中,类型名表示数组的基类型;*是一个说明符,表明此后声明的数组是一个指针数组,亦即该数组的每个元素均可存放与数组基类型类型相同的变量的指针;数组长度表示该指针数组中元素的个数。例如:
int*num[4];表示num 是指针数组,有4 个元素,每个数组元素均可存放一个整型变量的地址。由于运算符"[]"比"*"优先级高,因此num先与[4]结合,形成num[4]形式,这显然是数组形式,它有4 个元素。然后再与num 前面的"*"结合,"*"表示此数组是指针类型的。
注意:*数组名外不能加括号,添加括号后变为指向一维数组的指针,即数组指针。
指针数组适用于指向若干个字符串,使字符串处理更方便灵活,效率更高。例如,要
将若干个字符串(如书名、国名等)进行按字母顺序排序、查询等。
按通常方法,一个字符串本身就是一个一维字符数组,要处理若干个字符串要用到二维字符数组。但二维数组的列数确定后,每一行的元素个数都相等,而实际上各字符串长度往往是不相等的。如果按最长的字符串来定义列数,则会浪费许多内存单元。
因此可以设计一个指针数组,并使数组中的元素(指针变量)分别指向各个字符串。这样不必直接对字符串进行处理,只要对指针数组进行处理(改变指针变量的指向)即可。同时各字符串的长度可以不同,且移动指针要比移动字符串的速度快得多。
例如:
char*pname[5]={"JiangSu","ShanDong","ZheJiang","GuangXi","AnHui"};由此定义的指针数组中,其元素与字符串的关系如图9.6 所示。
图9.6 指针数组举例
【例9.16】指针数组的应用。
程序代码:(www.xing528.com)
运行结果:
程序讲解:
本程序中,puts 函数的作用是输出各个字符串。指针数组pname 中的元素pname[0]到pname[4]分别存储的是各字符串的首地址。
【例9.17】输入5 个字符串,按从小到大的顺序排序输出。
程序代码:
运行结果:
程序讲解:
定义二维字符数组s(5 行20 列)和字符指针数组p(数组长度为5)。通过循环语句依次输入5 个字符串,并把每个字符串首字符的地址依次赋给指针数组p 的每个元素。输入完毕后,使用冒泡排序算法进行排序,并且排完序之后把结果输出到屏幕。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。