您的位置:首页 > 其它

指针数组的定义和引用

2014-09-11 00:00 555 查看
摘要: 指针数组的定义和引用
指针数组是一种特殊的数组,指针数组的数组元素都是指针变量。指针数组的定义格式为:类型名称 *数组名称[数组长度];例如:float *pf[3];因为下标运算符[]的优先级高于指针运算符*,上述定义等价于:float * (pf[3]);说明pf是一个含有3个元素的数组,数组元素为指向float型变量的指针变量。又如:int *pn[5]; /*定义一个5个元素的指针数组,数组元素为指向int型变量的指针变量*/char *pc[10]; /*定义一个10个元素的指针数组,元素为指向char型变量的指针变量*/不论指针数组是什么类型,指针数组的每个数组元素都用来保存一个地址值,在TurboC下,每个数组元素是一个unsigned int型变量,占用2个字节。指针数组定义后,可以使数组元素指向一个变量和其他数组的首地址。下面是一个指针数组定义和引用的例子。main(){int i;char c1[]="How";char c2[]="are";char *c3="you";char *pArray[3];pArray[0]=c1;pArray[1]=c2;pArray[2]=c3;for(i=0;i<3;i++)printf("%s ", pArray[i]);}程序运行的结果为:How are you说明:(1)程序中c1,c2被定义为字符数组并初始化;c3是一个指针变量,指向字符串所在字符数组的首地址。(2)语句char *pArray[3];定义了三个元素的指针数组pArray,数组元素是指向char型变量或数组的指针变量。(3)语句pArray[0]=c1;将字符数组c1的首地址赋给pArray[0],指针变量pArray[0]指向了c1的首地址。(4)for循环中,语句printf("%s ", pArray[i]);依次打印了三个字符数组的内容。比如,pArray[0]里存放了c1的首地址,printf("%s ", pArray[0])和printf("%s ", c1)的作用是相同的。字符数组c1,c2,c3和指针数组pArray的内存情况如下图(图中的数组首地址值是假设的值)。指针数组pArray占用了从FFC0开始的6个字节。char型变量占用1个字节,因此字符数组c1,c2,c3均占用4个字节(包括字符串结束符'\0')。pArray[0]里存放了字符数组c1的首地址FF10,使pArray[0]指向c1。pArray[1]里存放了字符数组c2的首地址FF50,使pArray[1]指向c2。pArray[2]里存放了字符数组c3的首地址FF70,使pArray[2]指向c3。C语言中,允许定义并直接初始化一个未说明长度的char型指针数组。初始化时使用大括号,括号里的字符串用逗号隔开。因此,前面的程序也可以写成:main(){int i;char *pArray[]={ "How","are", "you"};for(i=0;i<3;i++)printf("%s ", pArray[i]);}编译器自动查到字符串的个数,定义pArray的长度为3。程序运行到语句char *pArray[3]={ "How","are", "you"};时,系统会自动创建3个字符数组,并分别将3个字符串保存在里面;然后将3个字符数组的首地址分别保存在pArray[0],pArray[1],pArray[2]中。
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: