5.2.5 C51的字符指针

字符指针是指向字符型变量的指针变量。字符指针最常用的就是对字符串进行操作。在C51语言中没有字符串变量,只有字符串常量。将字符串常量存放在一个字符数组中,使字符指向该字符数组,然后通过字符指针来访问字符串。

由前面章节的介绍可知,字符串常量是由双引号括起来的一个字符序列,示例如下。


“Good morning!”


该字符串由14个字符构成,其中包括13个字符和最后的空字符“\0”。在程序执行过程中,C51自动将字符串常量按顺序分配到一个连续的内存空间,并在字符串的末尾自动加上空字符“\0”。这段连续的存储区是静态的,在程序运行过程中始终被占用。

在一维字符串数组一节中,已经介绍过如何将字符串常量定义成一个字符数组,示例如下。


char str[]=“Good morning!”;


本例中,数组str共有14位数组元素所组成,其中最后一位str[13]中的内容是编译系统自动添加的空字符“\0”。

当定义一个指向该字符类型的字符指针后,便可以通过字符指针来对字符串进行操作。例如,定义一个字符指针pch,如下所示。


char*pch;


采用如下的语句可以使该字符指针指向一个字符串,如下所示。


pch=“Good morning!”;


该语句执行后,字符型指针pch便指向字符串中首字符“G”,如图5.6所示。

5.2.5 C51的字符指针 - 图1

图 5.6 指向字符串的字符指针

指向字符串的字符型指针的程序示例如下。


include<stdio.h>//头文件

void main()//主函数

{

char str[]=“Good morning!”;//定义并初始化字符数组str

char*pch;//定义字符型指针

pch=“Good morning!”;//将字符型指针指向字符串

printf(“str=%s\n”,str);//输出字符串str的值

printf(“pch=%c,pch[0]=%c\n”,pch,pch[0]);//输出地址pch中的内容

printf(“pch[3]=%c,(pch+3)=%c\n”,pch[3],(pch+3));//输出pch[3]中的内容*pch=‘d’;//该语句无法修改字符串常量

printf(“pch=%c,pch[0]=%c\n”,pch,pch[0]);//输出地址pch中的内容


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


str=Good morning!

*pch=G,pch[0]=G

pch[3]=d,*(pch+3)=d


本例中,pch指向字符串的第一个字符,即pch就是pch[0]。pch[i]和(pch+i)都同样表示字符串的第i个元素。由于常量的值不可改变,不能通过字符指针来修改字符串常量。因此,*pch=‘d’执行没有任何意义,原字符串常量不会改变。