char数组名[常量表达式1][常量表达式2]…[常量表达式n]
例如:
char a[5],b[3][5];
定义了一个一维的字符型数组a,数组a有5个char元素,分别是a[0],a[1],a[2],a[3],a[4],可以存储5个字符型的数据。还定义了一个二维的字符型数组b,它有3×5个char元素。
字符型数组定义的方法与前面介绍的数组定义方法一样。字符型数组也分为一维字符型数组和多维字符型数组。一维字符数组常常存放一个字符串;二维字符数组常用于存放多个字符串,可以看作是一维字符串数组。
由于字符型和整型可以通用,所以,也可以定义一个整型数组“int c[5]”,用来存放字符型数据,但这时每个数组元素占4个字节的内存单元,浪费存储空间。
在C语言中,字符型变量只能存放一个字符,而实际上经常用到的是字符串,字符串是作为字符型数组来处理的。数组的处理与循环是密不可分的,要想知道循环的次数就必须知道数组的长度,字符型数组也不例外,只不过在实际生活中,字符型数组的长度与字符串的实际长度有时是不相等的,而我们更关心的是字符串的实际长度。所以C语言规定了一个“字符串结束标志”——′\0′(ASCII码为0的空字符),存储一个字符串时总是在字符串后面自动加上一个′\0′,表示该字符串结束,该字符串就是由′\0′前面的字符组成的。
例如:
char c[5]={′c′,′h′,′i′,′n′,′a′};
没有′\0′,在输出时就得用下面的for语句:
for(i=0;i<5;i++)
printf("%c",c[i]);(www.xing528.com)
如果是
char c[10]={′c′,′h′,′i′,′n′,′a′,′\0′};
就可以直接用printf函数和后面要讲到的格式符“%s”来输出:
printf("%s",c);
不输出′\0′,遇到′\0′仅表示字符串结束。
“printf("%s",c);”与下面的程序段效果一样:
i=0;
while(c[i]!=′\0′)
putchar(c[i++]);
对于字符串常量,系统会自动地加一个′\0′作为结束符。比如:“hello everyone!”加上空格和标点符号共有15个字符,但在内存中占16个字节,最后一个字节′\0′是系统自动加上的。可以说,有了结束标志′\0′后,字符数组的长度就显得不那么重要了,系统可以通过检测′\0′来判定字符串是否结束。但是,在定义字符数组的时候,还应该估计字符串的实际长度,保证数组长度始终大于字符串的实际长度。
需要说明的是,字符数组并不要求它的最后一个字符为′\0′,甚至可以不包括′\0′,像上面的例子,“char c[5]={′c′,′h′,′i′,′n′,′a′};”是完全合法的,只是这种形式的数组只能用for循环来输出,而不能用格式符“%s”的形式输出。是否需要加′\0′,完全根据需要决定,但是由于系统对字符串常量会自动加一个′\0′,因此,为了使处理方法一致,在字符数组中也常常会人为地加上一个′\0′,这样便于在程序中做相应的处理。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。