字符串实际上是内存中一段连续的字节单元中存储的字符的总和,最后用\0作为结束标志。前面已经讲过,字符串与字符数组是密切相关的,而数组又与指针密切相关,因此,字符串与指针也密切相关。指向字符串的指针称为字符串的指针,其类型是char*或unsigned char*。
实际上,只要知道字符串的首地址的指针,就可以通过指针的移动来存取字符串中的每一个字符,直至移动到字符串结束标志\0,因此可以用字符串指针来表示字符串。例如:
其中,s就是一个字符串指针,在执行语句时,系统为字符串“hello”分配6个字节的空间,同时把字符串的首地址(即字符“h”的地址)赋给s指针变量。上述语句也可以写成:char s[]="hello";
用字符数组来存储字符串时,数组的指针就是字符串指针。在语句“char s[]="hello";”中,通过s指计可以访问到任何一个字符单元。如果i是一个整数下标,则s[i]与*(s+i)是同一元素,&s[i]与s+i是同一个地址。C语言程序可以允许使用两种方法实现一个字符串的引用。
(1)字符数组
【例7.9】字符数组的应用。
程序如下:
运行结果:
提示:
①字符数组s长度没有明确定义,默认的长度是字符串中字符个数加1的和(结束标志占一个字符位),所以s数组长度应该是9。
②s是数组名,表示字符数组首地址;s+4表示序号为4的元素的地址,指向字符'k'。s[4]与*(s+4)表示数组中序号为4的元素的值(k)。
③字符数组允许用%s格式进行整体输出。
(2)字符指针
【例7.10】字符指针的应用。
程序如下:
此处的语句“char*s=“I Like C";”仅是一种C语言表示形式,其真正的含义相当于:char a[]="I Like C",*s; s=a;其中,数组a是由C语言环境隐含给出的。
2.利用字符指针处理字符串
【例7.11】用字符指针指向字符串(图7-6)。程序如下:
图7-6 指针指向字符串
运行结果: I love China!
China!
使用字符数组和字符指针都能处理字符串,但二者之间是有区别的,主要表现在以下几个方面:
①字符数组由若干个元素组成,每个元素中放一个字符,若用来处理字符串,则必须保证有串结束符。而字符指针变量用来存放字符串的首地址(若未进行初始化,则它指向的地址是不确定的),不是用来存放整个字符串内容的。
②赋值方式不完全相同,对字符数组只能对各个元素赋值,不能整体赋值。
③在说明一个字符数组后,其地址是确定的,而说明一个字符指针变量时,指针变量的值是可以改变的。
综合案例引入和本节C语言指针变量的应用知识,利用指针编写程序能极大地减小内存占用率,提高运算效率,且程序结构紧凑美观。总结如下:
1.多反思,多总结。没有反思与总结,只是无目的地往前走,效率是不会提高的。反思与总结是检查过去,衔接现在,不断完善与提高自己的方法。(www.daowen.com)
2.团队协作是一种为达到既定目标所显现出来的资源共享和协同合作的精神,它可以调动团队成员的所有资源与才智,并且自动地驱除所有不和谐、不公正的现象,同时对表现突出者及时予以奖励,使团队协作产生一股强大而持久的力量。
1.有以下程序段:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
b中的值是( )。
A.5 B.6 C.8 D.9
2.若有以下定义,则对a数组元素的正确引用是( )。
int a[5],*p=a;
A.*&a[5] B.a+2 C.*(p+5) D.*(a+2)
3.若有以下定义,则p+5表示( )。
int a[10],*p=a;
A.元素a[5]的地址 B.元素a[5]的值
C.元素a[6]的地址 D.元素a[6]的值
4.有以下定义:
char a[10],*b=a;
不能给数组a输入字符串的语句是( )。
A.gets(a) B.gets(a[0]) C.gets(&a[0]); D.gets(b);
5.设已有定义:char*st="how are you";下列程序段中正确的是( )。
A.char a[11],*p; strcpy(p=a+1,&st[4]);
B.char a[11]; strcpy(++a,st);
C.char a[11]; strcpy(a,st);
D.char a[],*p; strcpy(p=&a[1],st+2);
6.设有说明:char*str[10];则标识符str的意义是( )。
A.str是一个指向有10个元素的数组的指针
B.str是一个有10个元素的数组,数组元素的数据类型是指向char型的指针型
C.str是一个指向char型函数的指针
D.str是具有10个指针元素的一维指针数组,每个元素都只能指向整型变量
7.有以下程序:
输出结果是( )。
A.gm B.rg C.or D.ga
8.请同学们为自己制订一个符合自己的学习及生活计划,并利用本节课所学习的指针的内容,编写一个程序,通过输入星期,输出当天所需要完成的目标,帮助自己养成一个良好的学习生活习惯。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。