一维字符数组的定义、初始化及引用,C语言一维字符数组详解
一维字符数组一般用于存储和表示一个字符串,二维字符数组一般用于存储和表示多个字符串,其每一行均可表示一个字符串。
一维字符教组的定义及初始化一维字符数组的定义格式为:
char 数组名[数组大小];
例如:
char c[10];
该语句定义了一个一维字符数组 c,大小为 10,即占 10 个字符变量空间,最大可存储长度为 9 的字符串(第 10 个字符为 0 )。由于没有显式给每个字符变量赋值,故每个字符变量为随机值。
可以采用单个字符逐个赋值的方式初始化,也可以使用字符串初始化的方式。
采用逐个字符赋值的方式1) 当字符个数少于数组空间大小时,例如:
char c[8] = { h , e , l , l , o //始值个数5小于数组空间个数8
该语句定义了含 8 个字符变量的一维字符数组,前 5 个字符变量分别显式初始化为 h , e , l , l , o 等 5 个字符,后 3 个字符变量为空字符 /0 。其存储形式如下。
当字符数组中含有字符串结束字符 /0 时,可以使用 printf 函数及格式控制符 %s,输出该字符数组中的字符串,如下所示。
printf ( %s ,c); //数组名 c 为首字符 h 的地址或者为 c[0]
注意:使用 printf 函数及格式控制符 %s,输出一个字符串时,输出列表中一定为某个字符的地址,且从该字符开始的串一定有结束标志 /0 。该语句的功能是:从输出列表中的该地址开始,到第一次遇到 /0 为止,这之间的字符全部输出。
通常一维数组初始化时,其第一维大小可以省略,例如:
char c[]={ h , e , l , l , o
对应的数组存储形式如下所示。
由于该数组中不存在 /0 字符,故不能使用 printf( %s ,c); 输出。
char c[8] = { h , e , l , l , o
不等价于
char c[]={ h , e , l , l , o
2) 当字符个数等于数组空间大小时,例如:
char c[5]={ h , e , l , l , o //初值个数5等于数组大小5
执行该初始化语句后,数组的存储形式如下所示。
char c[5]={ h , e , l , l , o
等价于
char c[]={ h , e , l , l , o
由于该字符数组中不包含字符串结束标志 /0 ,故不能使用 printf( %s ,c); 输出其中的字符串。输出结果中一般含有随机乱码。
这种情况一般采用循环语句逐个输出该数组中的每个字符。
int i; for(i=0;i i++) //循环次数为字符个数或数组大小 printf ( %c ,c[i]);//格式控制符为%c,输出列表中为字符变量c[i]
3) 当字符个数多于空间大小时,编译时报错。例如:
char c[4] = { h , e , l , l , o }; //错误。初值个数5大于数组大小4采用字符串初始化的方式
在 C 语言中,字符串一般是指含有字符串结束符 /0 的若干个字符的集合。而使用双引号括起来的字符串常量,默认隐含字符串结束符 /0 。例如:
char c[12] = { C program //注意该数组大小应足够大
用字符串对字符数组初始化时,一般大括号可以去掉,即:
char c[12]= C program
该初始化语句与以下三条语句均是等价的。
char c[12]= { C , , p , r , o , g , r , a , m , /0 , /0 , /0
或者:
char c[12] = { C , , p , r , o , g , r , a , m , /0
或者:
char c[12] = { C , , p , r , o , g , r , a , m
以上等价初始化语句有一个共同特点:数组的大小均为指定值 12。
其数组存储形式均如下所示。
采用字符串对字符数组进行初始化时,一般省略一维数组空间的大小,即:
char c[]= C program
该数组中除了存储字符串中的 9 个有效字符外,还自动在字符串的结尾存储 /0 字符。即该数组的大小为 10。其存储形式如下所示。
为节省空间及书写方便,当用字符串对字符数组初始化时,一般均省略其一维的大小。
一维字符数组的引用字符数组中的每一个元素都是一个字符,可以使用下标的形式来访问数组中的每一个字符。
例如
char c[]= abcd
定义了一个一维字符数组 c,用字符串常量对其初始化,该数组大小为 5,前 4 个元素的值分别为 a 、 b 、 c 、 d ,第 5 个元素的值为 /0 。其存储形式如下所示。
可以使用 c[i] 引用该数组中的每个元素,例如:
c[2]= f //把 f 赋给元素c[2] scanf( %c , c[3]); //输入一个字符,保存到元素c[3]对应的地址空间中 printf( %c ,c[1]); //输出元素c[1]中的字符值
如果每次输出一个字符,可使用循环语句输出字符数组中保存的字符串,参考代码如下。
int i; for(i=0;c[i]!= /0 i++) //当前i号位置的字符变量只要不是结束符就输出 printf( %c ,c[i]);一维字符教组的应用举例
C 语言中的字符串总是以 /0 作为结束标志,所以字符串的长度指的是从字符串的首字符开始,到第一次遇到 /0 为止,这之间所包含的有效字符的个数,结束符不计算在字符串长度内。
如字符串 abcd ,C 语言中字符串最后一个有效字符后隐含 /0 字符,故该字符串长度为 4。
【例 1】编写实现求一个字符串长度的程序。
分析:把字符串保存在一维字符数组中,其长度用 len 表示,初始为 0。算法为:从该数组的首元素(0 号位置)开始,只要当前元素不为 /0 ,len 加 1,直到遇到 /0 为止,此时 len 的值即为该字符串的长度。
实现代码:
#include stdio.h int main (void) char str[]= A good book is a good friend! int i, len=0; //len必须初始化为0 for(i=0;str[i]!= /0 i++) len++; printf ( The length is: %d/n ,len); return 0; }
运行结果为:
The length is: 29
【补充】该程序循环部分也可以使用 while 循环,如下所示:
while(str[i]!= /0 ) len++; i++; }
21568.html
go相关文章
- C语言经典编程题100例 71~80
- C语言操作EXCEL文件(读写)[通俗易懂]
- C语言 一个字符常量占几个字节
- C语言 Char* 和Char 用法[通俗易懂]
- C语言例题:编写程序将两个字符串进行连接,不使用strcat函数
- C语言一维数组二维数组、字符数组【C语言学习笔记】
- C语言:定义一个指针字符串,统计英文字母、空格、数字和其他字符的个数,要求使用函数完成。
- C语言中负数做运算你会了吗
- 位运算--C语言版
- C语言中浮点数据类型(你学废了吗)
- 搭建Linux下的C语言开发环境(linux下c开发环境)
- C语言iscntrl()函数:判断一个字符是否为控制字符
- C语言isgraph()函数:判断一个字符是否是图形字符
- C语言isprint()函数:判断一个字符是否是可打印字符
- C语言isupper()函数:判断一个字符是否是大写字母
- Linux下C语言编写多线程程序简明指南(linuxc多线程)
- MySQL编译:C语言编程实践(cmysql编译)
- MySQL列表查询实践深度探索C语言实现(c mysql 列表查询)
- MySQL中用以查询列表的C语言方法(c mysql 列表查询)
- C语言与Oracle的数据库连接一步到位(C语言入库oracle)
- Oracle中C语言取值实战(oracle c 取值)