任务描述
除了前面所介绍的指针以外,指针还有其他一些类型的使用。通过本项目的学习,让大家了解其他指针的使用方法和特点。
知识学习
(1)指针数组
一个数组的元素值为指针则是指针数组。指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组定义的形式为:
类型名*数组名[常量表达式];
例如:char *message[10] ={"one","two","three”}
上述声明的功能如下:
①为一个包含10 个元素的、名为message 的数组分配空间,其中每个元素都是char 指针。
②在内存的某个地方分配空间,用于存储3 个初始字符串,其中每个字符串都以空字符结尾。
③将message[0]、message[1]、message[2]分别初始化为指向第一个字符串(one)、第二个字符串(two)和第三个字符串(three)的第一个字符的指针。
例7.13 将多个字符串按字母顺序输出。
指针数组的主要用于管理同种类型的指针,其中最常用在处理若干个字符串(如二维字符数组)的操作。
(2)指向指针的指针
指针的地址可以赋给另一个指针变量,这另一个指针变量就称为指向指针的指针。
指向指针的指针定义的一般形式为:
(3)main 函数的参数
前面介绍的main 函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是main 函数的形式参数。C语言规定main 函数的参数只能有两个,习惯上这两个参数写为argc 和argv。因此,main 函数的函数头可写为:
main (argc,argv)
C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main 函数的函数头应写为:
main (int argc,char *argv[])
由于main 函数不能被其他函数调用,因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main 函数的形参呢? 实际上,main 函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS 提示符下键入文件名,再输入实际参数即可把这些实参传送到main 的形参中去。
DOS 提示符下命令行的一般形式为:
C:\ >可执行文件名 参数 参数……;
但是应该特别注意的是,main 的两个形参和命令行中的参数在位置上不是一一对应的。因为,main 的形参只有2 个,而命令行中的参数个数原则上未加限制。argc 参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc 的值是在输入命令行时由系统按实际参数的个数自动赋予的。
例如有命令行为:
C:\ >E24 BASIC foxpro FORTRAN
由于文件名E24 本身也算一个参数,所以共有4 个参数,因此argc 取得的值为4。argv 参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。指针数组的长度即为参数个数。数组元素初值由系统自动赋予。其表示如图7.2所示:
(www.xing528.com)
图7.2 参数对应的存储数据
说明:
本例是显示命令行中输入的参数。如果上例的可执行文件名为e24.exe,存放在A 驱动器的盘内。因此输入的命令行为:
C:\ >a:e24 BASIC foxpro FORTRAN
则运行结果为:
BASIC
foxpro
FORTRAN
该行共有4 个参数,执行main 时,argc 的初值即为4。argv 的4 个元素分为4 个字符串的首地址。执行while 语句,每循环一次argv 值减1,当argv 等于1 时停止循环,共循环3 次,因此共可输出3 个参数。在printf 函数中,由于打印项* ++argv 是先加1 再打印,故第一次打印的是argv[1]所指的字符串BASIC。第二、三次循环分别打印后两个字符串。而参数e24 是文件名,不必输出。
任务总结
1)有关指针的数据类型的小结
续表
2)指针运算的小结
现把全部指针运算列出如下:
①指针变量加(减)一个整数:
例如:p++、p--、p+i、p-i、p+ =i、p- =i
一个指针变量加(减)一个整数并不是简单地将原值加(减)一个整数,而是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数加(减)。
②指针变量赋值:将一个变量的地址赋给一个指针变量。
注意:不能如下:
p=1000;
③指针变量可以有空值,即该指针变量不指向任何变量:
p=NULL;
④两个指针变量可以相减:如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数。
⑤两个指针变量比较:如果两个指针变量指向同一个数组的元素,则两个指针变量可以进行比较。指向前面的元素的指针变量“小于”指向后面的元素的指针变量。
3)void 指针类型
ANSI 新标准增加了一种“void”指针类型,即可以定义一个指针变量,但不指定它是指向哪一种类型数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。