资源描述:
《c语言字符数组初始化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1、字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即' ')。2、字符数组与字符串在c语言中,将字符串作为字符数组来处理。(c++中不是)在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度,例如,定义一个字符数组长度为1
2、00,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符' ’代表。如果有一个字符串,其中第10个字符为' ',则此字符串的有效字符为9个。也就是说,在遇到第一个字符' '时,表示字符串结束,由它前面的字符组成字符串。系统对字符串常量也自动加一个' '作为结束符。例如"CProgram”共有9个字符,但在内存中占10个字节,最后一个字节' '是系统自动加上的。(通过sizeof()函数可验证)有了结束标志' '后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测' '的位置来判定字符串是否结束,而不
3、是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,常常并不指定数组长度,如charstr[])说明:'’代表ASCII码为0的字符,从ASCII码表中可以查到ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。对C语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——即可以用字符串常量来初始化字符数组:charstr[]={"Iamhappy
4、"};可以省略花括号,如下所示charstr[]="Iamhappy";注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的charstr[];str="Iamhappy";不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,因为字符串常量"Iamhappy"的最后由系统自动加上一个' ')因此,上面的初始化与下面的初始化等价ch
5、arstr[]={'I','','a','m','','h','a','p','p','y',' '};而不与下面的等价charstr[]={'I','','a','m','','h','a','p','p','y'};前者的长度是11,后者的长度是10.说明:字符数组并不要求它的最后一个字符为' ',甚至可以不包含' ',向下面这样写是完全合法的。charstr[5]={'C','h','i','n','a'};++++++++可见,用两种不同方法初始化字符数组后得到的数组长度是不同的。#includevoidmain(void){ch
6、arc1[]={'I','','a','m','','h','a','p','p','y'};charc2[]="Iamhappy";inti1=sizeof(c1);inti2=sizeof(c2);printf("%d",i1);printf("%d",i2);}结果:10113、字符串的表示形式在C语言中,可以用两种方法表示和存放字符串:(1)用字符数组存放一个字符串charstr[]="IloveChina";(2)用字符指针指向一个字符串char*str="IloveChina";对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把
7、字符串常量"IloveChina"直接赋给该字符串变量,这是不对的。C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。两种表示方式的字符串输出都用printf("%s",str);%s表示输出一个字符串,给出字符指针变量名str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,然后自动使str自动加1,使之指向下一个字符...,如此,直到遇到字符串结束标识符"
8、 "。4、对使用字符指