C语言数组:C语言数组定义、二维数组、动态数组、字符串数组 用来存放字符的数组称为字符数组,例如: 由于char和int可以相互转换,也可以定义为: 但这时每个数组素占4个字节的内存。 字符数组也可以是二维或多维数组。例如: 字符数组也允许在定义时进行初始化,例如: 当对全体素赋初值时也可以省去长度说明。例如: 这时c数组的长度自动定为9。 字符数组和普通数组一样,也是通过下标引用各个素。 【示例】输出字符数组中的素。 运行结果:C LangProgramFunny 本例的二维字符数组由于在初始化时全部素都赋以初值,因此一维下标的长度可以不写。 ①.字符串和字符串结束标志 在C语言中没有专门的字符串变量,没有string类型,通常用一个字符数组来存放一个字符串。 前面已经教大家用puts和printf函数输出字符串,例如: 在C语言中,字符串总是以’0’作为串的结束符。上面的两个字符串,编译器已经在末尾自动添加了’0’。’0’是ASCII码表中的第0个字符,用NUL表示,称为空字符。该字符既不能显示,也不是控制字符,输出该字符不会有任何效果,它在C语言中仅作为字符串的结束标志。字符串处理函数遇到NUL时会认为字符串已经结束,不再继续操作,例如: 运行结果:C Lang 可以发现,’0′ 后面的字符都没有输出。 当把字符串存入字符数组时,也应该把结束符 ‘0’ 存入数组,并以此作为该字符串是否结束的标志。有了’0’标志后,就不必再用字符数组的长度来判断字符串的长度了。 C语言允许用字符串的方式对数组作初始化赋值。例如: 可写为: 或去掉{}写为: 用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志 ‘0’。上面的数组c在内存中的实际存放情况为:
‘0’ 是由编译器自动加上的。由于采用了 ‘0’ 标志,所以在用字符串赋初值时一般无须指定数组的长度, 而由编译器自行处理。 ②.字符数组的输入输出 在采用字符串方式后,字符数组的输入输出将变得简单方便。除了上述用字符串赋初值的办法外,还可用printf函数和scanf函数一次性输出输入一个字符数组中的字符串,而不必使用循环语句逐个地输入输出每个字符。 【示例】使用printf输出整个字符数组。 运行结果:C LangJavaC++Python 在printf函数中,使用%s输出字符串。注意在输出列表中给出数组名即可。不能写为printf(“%s”, c[]);。 【示例】使用scanf从控制台输入一个字符串,然后使用printf将其输出。 运行结果:Input string: http://c.biancheng.net↙Your string is: http://c.biancheng.net 由于字符数组长度为100,因此输入的字符串长度必须小于100,以留出一个字节用于存放字符串结束标志`0`。 ③对程序的几点说明 1) 对一个字符数组,如果不作初始化赋值,则必须说明数组长度。 2) 当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。 例如当输入的字符串中含有空格时,运行结果为:Input string: c language↙Your string is: c 可以看出,空格以后的字符都未能输出。为了避免这种情况,可多设几个字符数组分段存放含空格的串。程序可改写如下: 运行结果:Input string: C C++ Java PythonYour string: C C++ Java Python 3) 在《从键盘输入数据》中讲到,scanf 的各个变量前面要加取地址符&,用以获得变量的地址,例如: 但是在本节的示例中,将字符串读入字符数组却没有使用&,例如: 这是因为C语言规定,数组名就代表了该数组的地址。整个数组是一块连续的内存单,如有字符数组char c[10],在内存可表示为:
C语言还规定,数组名所代表的地址为第0个素的地址,例如char c[10];,c就代表c[0]的地址。第0个素的地址就是数组的起始地址,所以称为首地址。也就是说,数组名表示数组的首地址。 设数组c的首地址为0X2000,也就是说c[0]地址为0X2000,则数组名c就代表这个首地址。 因为c已经表示地址,所以在c前面不能再加取地址符&,例如写作 scanf(“%s”,&c); 是错误的。 有了首地址,有了字符串结束符’0’,就可以完整的定位一个字符串了。例如: printf 函数会根据数组名找到c的首地址,然后逐个输出数组中各个字符直到遇到 ‘0’ 为止。int、float、char 类型的变量表示数据本身,数据就保存在变量中;而数组名表示的是数组的首地址,数组保存在其他内存单,数组名保存的是这块内存的首地址。后面我们会讲解指针,大家将会有更加深刻的理解。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/80458.html