一维数组
一维数组的定义
数组是一组有序数据的集合
数组中的每一个元素都属于同一个数据类型
定义一维数据的一般形式:
类型符 数组名[常量表达式];
常量表达式可以包含常量和符号常量,不能包含变量
如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或非常量表达式;如:
void func(int n)
{
int a[2*n];//合法,n的值从实参传来
}
在调用func函数时,形参n从实参得到值,这种情况称为“可变成数组”,允许在每次调用func函数时,n有不同的值,但是在执行函数时,n的值是不变的,数组长度是固定的
如果指定数组为静态(static)存储方式,则不能用“可变长数组”。如:
static int a[2*a]; //不合法,数组指定为static存储方式
一维数组元素的引用
引用数组元素的表现形式为:
数组名[下标]
int a[10]; //这里的a[10]表示的是定义数组时指定数组元素包含10个元素
t=a[6]; //这里的a[6]表示引用a数组中序号为6的元素
一维数组的初始化
定义数组的同时,给各数组元素赋值,称为数组的初始化
如果在定义数组值型数组时,指定了数组的长度并对之初始化,凡未被“初始化列表”指定初始化的数组元素,系统会自动把它们初始化为0(如果是字符型数组,则初始化为‘\0’,如果是指针型数组,则初始化为NULL,即空指针)
二维数组
二维数组的定义
二维数组定义的一般形式为
类型说明符 数组 [常量表达式] [常量表达式]
C语言中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第1行的元素,接着再存放第2行的元素
在内存中,各元素是连续存放的,不是二维的,是线性的
二维数组的引用
二维数组元素的表现形式
数组名 [下标] [下标]
数组元素可以出现在表达式中,也可以被赋值,例如:b[1] [2] =a[2] [3] /2
二维数组的初始化
如果对全部元素都赋初值,则定义数组时对第1维的长度可以不指定,但第2维的长度不能省
例如: int [ ] [4] ={1,2,3,4,5,6,7,8,9,10,11,12};
字符数组
用来存放数据的数组是字符数组,字符数组中的一个元素存放一个字符
字符数组的初始化
char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};//把10个字符串依次分别赋值给c[0]~c[9]这10个元素
如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误;如果初值个数小于数组长度,则将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即‘\0’)
C系统在用字符数组存储字符串常量时会自动加一个‘\0’作为结束符
‘\0’代表ASCLL码为0的字符,ASCLL码为0的字符不是一个可以显示的字符,而是一个空格操作符,什么也不做,用它来作为字符串结束标志不会产生附加的操作或增加一个有效字符,只起一个供辨别的标志
//字符数组初始化的方法
char c[]={"i am happy"};
char c[]="i am happy";
使用字符串处理函数
puts函数——输出字符串的函数
一般形式:put(字符数组)
作用:将一个字符串输出到终端
gets函数——输入字符串的函数
一般形式:gets(字符数组)
作用:从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址
注意:puts和gets函数只能输出或输入一个字符串
strcat函数——字符串连接函数
一般形式:strcat(字符数组1,字符数组2)
作用:是把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1,函数调用后得到一个函数值——字符数组1的地址
char str1[30]={"people's republic of"};
char str2[]={"china"};
printf("%s",struct(str1,str2));
//输出
People's republe of china
说明:
- 字符数组1必须足够大,以便容纳连接后的新字符串
- 连接前两个字符串的后面都有‘\0’,连接时将字符串1后面的‘\0’取消,只在新串最后保留‘\0’
strcpy和strncpy函数——字符串复制函数
一般形式:strcpy(字符串1,字符串2)
作用:将字符串strcpy2复制到字符串数组1中去
char str1[10]=,str2[]="china";
strcpy(str1,str2);
说明:
- 字符数组1必须定义的足够大,以便容纳被复制的字符串2,字符数组1的长度不应小于字符串2的长度
- 字符数组1必须写成数组名形式(如str1),字符串2可以是字符数组名,也可以是一个字符串常量。如:strcpy(str1,“china”);
- 如果在复制前未对str1数组初始化或赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后的‘\0’一起复制到字符数组1中,取代字符数组1中的前6个字符,最后4个字符并不一定‘\0’,而是str1中原有的最后4个字节的内容
- 不能用赋值语句将一个字符串常量或字符串数组直接给一个字符数组
- 可以用strncpy函数将字符串2中前n个字符复制到字符数组1中去,例如:strncpy(str1,str2,2)作用是将str2最前面的2个字符复制到str1中,取代str1中原有的最前面2个字符,但复制的字符个数n不应多于str1中原有的字符(不包括‘\0’)
strcmp函数——字符串比较函数
一般形式:strcmp(字符串1,字符串2)
作用:比较字符串1和字符串2
//例如:
strcmp(str1,str2);
strcmp("china","korea");
strcmp(strl,"beijing");
说明:字符串比较的规则:将两个字符串自左向右逐个字符相比(按ASCLL码值大小比较),直到出现不同的字符或遇到‘\0’为止
- 如果全部字符相同,则认为两个字符串相同
- 如果出现不相同的字符,则以第1对不相同的字符的比较结果为准(小写字母比大写字母大)
比较的结果由函数值带回
- 如果字符串1=字符串2,则函数值为0
- 如果字符串1>字符串2,则函数值为一个正整数
- 如果字符串1<字符串2,则函数值为一个负整数
strlen函数——测字符串长度的函数
一般形式:strlen(字符数组)
函数的值为字符串中的实际长度(不包括‘\0’在内)
char str[10]="china";
printf("%d",strlen(str));
strlwr函数——转化为小写的函数
一般形式:strlwr(字符串)
作用:将字符串中的小写字母转化为小写字母
strupr函数——转化为大写的函数
一般形式:strupr(字符串)
作用:将字符串中的小写字母转成大写字母
注意:在使用字符串处理函数时,应当在程序文件的开头用
include<string.h>,把“string.h”包含到本文件中