C语言学习5

文章目录

数组

本文将描述数组的定义与应用、字符串处理等知识。

一维数组的定义和引用

一维数组的定义

一维数组是指数组中的每一个元素只带有一个下标的数组。定义方式:类型说明符 数组名[常量表达式]

一维数组元素的引用

数组元素的引用形式为:数组名[下标表达式]
说明:
●一个数组元素实质上是一个变量名,代表内存中的一个存储单元,一个数组占据的是一连串连续的存储单元。
●引用数组元素时,数组的下标可以是整型常量,也可以是整形表达式。
●数组必须先定义后使用
●只能逐个引用数组元素而不能一次引用整个数组。

一维数组的初始化

当数组定义后,系统会为该数组在内存中开辟一串连续的存储单元,但这些存储单元中并没有确定的值。可以在定义数组时为包含的数组元素赋初值。如:int a[6]={0,1,2,3,4,5}
说明:
●所赋初值放在一对花括号中,数值类型必须与所说明类型一致。
●所赋初值之间用逗号隔开,系统将按这些数组的排列顺序,从a[0]元素开始依次给数组a中的元素赋初值。
●不能跳过前面的元素给后面的元素赋初值,但是允许为前面元素赋值为0。
●当所赋初值个数少于所定义数组的元素个数时,将自动给后面的其他元素补初值0。
●可以通过赋初值来定义一维数组的大小,定义数组时的一对方括号中可以不指定数组的大小。

二维数组的定义和引用

二维数组的定义

1.在C语言中,二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行元素,再存放第二行的元素。二维数组元素的存储总是占用一块连续的内存单元。
2.一般形式: 类型说明符 数组名[常量表达式][常量表达式]

二维数组元素的引用

表示形式: 数组名[下标表达式1][下标表达式2]
●数组的下标可以是整型表达式
●数组元素可以出现在表达式中,可以被赋值

二维数组的初始化

●可以在定义二维数组的同时给二维数组的元素赋初值
●全部初值放在一对花括号中,每一行的初值又分别括在一对花括号中,之间用逗号隔开。
●当某一对花括号内的初值个数少于该行中元素的个数时,系统将自动地给后面的元素赋初值0
●不能跳过每行前面的元素而给后面的元素赋值。
●对于二维数组,只可以省略第一个方括号中的常量表达式,但不能省略第二个方括号中的常量表达式。

通过赋初值定义二维数组的大小

对于一维数组,可以在数组定义语句中省略方括号中的常量表达式,通过所赋初值的个数来确定数组的大小;
对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式。

字符数组

字符数组的定义

字符数组就是数组中的每一个元素都是字符。定义方法同普通数组的定义相同,即逐个对数组元素赋值。

字符数组的初始化及引用

1.初始化:对字符数组初始化,可逐个元素地赋值,即把字符逐个赋给数组元素。
●如果花括号中提供的初值个数(即字符个数)大于数组长度,则编译时会按语法错误处理。
●如果初值个数小于数组长度,则将这些字符赋值给数组中前面那些元素,其余元素定为空字符\0;
2.引用形式:采用下标引用,即
数组名[下标]

字符串和字符串结束标志

C语言中,将字符串作为字符数组来处理。为测定字符串的实际长度,C语言规定了一个字符串结束标志,以字符”\0”代表。就是说,在遇到字符”\0”时,表示字符串结束,由它前面的字符组成字符串。

字符数组的输入输出

字符数组的输入输出有两种方法:
●用”%c”格式符将字符逐个输入或输出。
●用”%s”格式符将整个字符串一次输入或输出。

在C语言中,有两个函数可以在控制台(显示器)上输出字符串
●puts() 输出字符串并自动换行,该函数只能输出字符串。
●printf() 通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf()还可输出其他类型数据。

在C语言中,有两个函数可以从键盘上输入字符串,它们是
●scanf() 通过格式控制符%s输入字符串。除了字符串,scanf()还能输入其他类型的数据。[遇到空格就结束输入,无法含有空格]
●gets() 直接输入字符串,并且只能输入字符串。[认为空格也是字符串的一部分,以回车作为字符串结束]

字符串处理函数

C语言没有提供对字符串进行整体操作的运算符,但在C语言的函数库中提供了一些用来处理字符串的函数。在调用这些函数前,必须在程序前面命令行包含标准头文件”string.h”。
●puts() 调用形式为puts(字符数组),将一个字符串(以”\0”结束)输出到终端设备。
●gets() 调用形式为gets(字符数组),从终端输入一个字符串到字符数组中,并得到一个函数值。
●strcpy() 调用形式strcpy(字符数组1,字符数组2),把字符数组2所指字符串的内容复制到字符数组1所指存储空间中。函数返回字符数组1的值,即目的串的首地址。
●strcat() 调用形式为strcat(字符数组1,字符数组2),该函数将字符数组2所指字符串的内容连接到字符数组1所指的字符串后面,并自动覆盖字符数值1串末尾的”\0”。该函数返回字符数组1的地址值。
●strlen() 调用形式为strlen(字符数组),此函数计算出以字符数组为起始地址的字符串的长度,并作为函数值返回。
●strcmp() 调用形式为strcmp(字符数组1,字符数组2),该函数用来比较字符数组1和字符数组2所指字符串的大小。若字符数组1>字符数组2,函数值大于0(正数);若字符数组1=字符数组2,函数值等于0;若字符数组1<字符数组2,函数值小于0(负数)。

C语言数组是静态的

在C语言中,数组一旦被定义,占用的内存空间就是固定的,容量就是不可改变的,既不能在任何位置插入元素,也不能在任何位置删除元素,只能读取和修改元素,我们将这样的数组称为静态数组
▲动态数组:指数组在定义后可以改变容量,允许任意位置插入或删除元素的数组。
一般 C、C++等编译型语言不支持动态数组;而PHP、JavaScript等解释型语言支持动态数组。

数组越界与溢出

数组越界: 当数组下标小于0或大于等于数组长度时引用 就会发生越界(out of bounds),即访问数组以外的内存。
下标小于0即下限越界(Off Normal Lower)
下标大于等于数组长度即为上限越界(Off Normal Upper)
数组溢出:即赋予数组元素的个数超过数组长度。

注意:在用字符串给字符数组赋值时,要保证数值长度大于字符串长度,以容纳结束符”\0”。

C语言变长数组(VLA, Variable Langth Array):使用变量指明数组长度。
●在C89标准中,必须使用常量表达式指明数组长度。
●在C99标准中,可以使用变量指明数组长度。
变长数组仍是静态数组,其长度一旦定义就无法改变。


版权声明

Scholar’s Blog by scholargeek is licensed under a Creative Commons BY-NC-ND 4.0 International License.
董仕麟创作并维护的scholargeek博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证

本文首发于Scholar’s Blog博客,版权所有,侵权必究。

本文永久链接:https://scholargeek.github.io/2018/02/10/C%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A05/

更新日期: