资源描述:
《第8章 字符串.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第8章字符串8.1字符串8.2函数间字符串的传递习题8.1字符串8.1.1字符串常量1.定义字符串常量是由一对双引号括起来的字符序列。例如,"China","Howareyou","$abc","123569","string"等都是合法的字符串常量。2.说明(1)双引号仅仅起到字符串常量的边界符作用,并不是字符串常量的一部分。(2)注意区分字符串常量和字符常量的区别。例如,"c"和'c'是根本不同的数据,前者是字符串常量,后者是字符常量。它们之间主要有以下区别: ①字符常量由单引号括起来,字符串常量由双引号括起来; ②字符常量只能是单个字符,字符串常量则可以含一个或多个字符;
2、 ③可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量; ④字符常量占一个字节的内存空间。8.1.2字符串的存储C语言规定:在每一个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。同时C语言也规定:以字符' '作为字符串的结束标志。字符' '是一个ASCII码为0的字符。从ASCII代码表中可以看到,ASCII码为0的字符是“空操作字符”,它不引起任何控制动作,也不是一个可显示的字符,即它什么也不做。用它作为字符串结束标志不会产生附加的操作或增加有效字符,它只是一个供辨别的标志。 因此,字符串常量在内存中所占的字节数等于字符
3、串中有效字符所占的字节数(即有效字符的个数)再加1个字节。增加的一个字节存放的是字符串结束的标志' '。例如:字符串"Welcome"在内存中所占的字节为:注意区分字符串常量和字符常量的区别。例如"s"和's',字符串常量"s"和字符常量's'虽然都只有一个字符,但在内存中的情况是不同的。字符串"s"在内存中占2个字节,可表示为: 字符's'在内存中占一个字节,可表示为: 注意:在写字符串时不必加' ',' '字符是系统自动加上的。8.1.3字符串的表示1.字符数组C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。C语言允许用字符串的方式对字符数组
4、作初始化,即可以用字符数组存放一个字符串。 例如:charc[]={'W','e','l','c','o','m','e'};可写为:charc[]={"Welcome"};也可以省略花括号,直接写为:charc[]="Welcome";注意:用字符串方式赋值比用字符逐个赋值要多占一个字节,多占的字节用于存放字符串结束标志' '。因此,以下两个字符数组的初始化等价,其字符数组的长度都是8。charc[]="Welcome";charc[]={'W','e','l','c','o','m','e',' '};字符数组完整的应用程序举例如下:/*源程序8-1*/#include"s
5、tdio.h"main(){charstring[]="WelcometoChina!";printf("%s",string);}程序运行结果如下:2.字符指针也可以不定义字符数组,而定义一个字符指针,用字符指针指向字符串中第一个字符的地址。/*源程序8-2*/#include"stdio.h"main(){char*string="WelcometoChina!";printf("%s",string);}程序运行结果如下:3.字符数组和字符指针变量的区别(1)字符数组有若干个元素,每个元素中存放一个字符;而字符指针变量中存放的是字符串中第一个字符的地址。(2)赋值方式的不
6、同。 例如:字符指针的赋值语句:char*string="Welcome";它等价于:char*string;string="Welcome";因为可以将字符串的首地址存放在指针变量中。而字符数组的赋值语句:charstring[]="Welcome";它不等价于:charstring[];string[]="Welcome";因为string表示字符数组的首地址,是常量,不能在赋值号的左端进行修改,不能将字符串的首地址赋值给数组名。(3)字符数组在编译时为其分配存储单元,有确定的地址;字符指针分配的内存单元只能存放一个字符变量的地址,若没有赋值,则没有确定的指向。charstri
7、ng[20];scanf("%s",string);以上语句是正确的。char*p;scanf("%s",p);以上语句是错误的,因为字符指针没有指向任何存储空间, 不能输入字符串。应改成:charstring[20],*p;p=string;scanf("%s",p);(4)指针变量的值可以改变,是变量;数组名是常量,它的值是不能改变的。/*源程序8-3*/#include"stdio.h"main(){char*string="Welcom