建设境外网站/整合营销传播案例分析
C 语言总结:数组
1. 一维数组
1.1 一维数组的定义
int a[10];
1.2 一维数组的初始化
//以下代码均为定义并初始化一个长度为5的整数数组;
int a[5] = {1,2,3,4,5};
int a[5] = {1,2,3}; // a = {1,2,3,0,0};
int a[5] = {0}; // a = {0,0,0,0,0};
int a[] = {1,2,3,4,5}; //默认a的长度为5;
2. 二维数组
2.1 二维数组的定义
int a[3][4];
二维数组就是一维数组的一维数组;上面的数组a包含三行,即三个元素,分别为a[0], a[1], a[2]。而每个元素又是一个一维数组,均包含四个元素。
2.2 二维数组的初始化
//以下代码均为定义并初始化一个3*4的二维整数数组;
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12]};int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//在可确定维度时,可省第一个长度,但第二个长度不可省;int a[3][4] = {{1},{3,4},{4,5,6]};
int a[3][4] = {{},{3,4},{5}};
int a[3][4] = {{1},{5,6}}; //省略第三行的初始化;、int a[][4] = {{1,2,3},{},{8}};
3. 字符数组
3.1 字符数组的定义
char str[10];
3.2 字符数组的初始化
字符数组如果在定义时未初始化,则系统自动初始化的内容是不确定的。
由于字符数组的实际字符串长度往往小于定义的数组长度,系统为了便于知道字符数组在何处结束,会在用户定义的字符串后自动加一个结束符’\0’作为标记(如果字符数组长度允许的话),在输出字符串时,只要遇到字符’\0’就会停止输出,认为该字符串已结束。但是如果字符串内容刚好已打字符数组长度,则不会再添’\0’,比如下面代码中的第一个示例。
char str[5] = {'C','h','i','n','a'};//str占5个字节;
char str[] = {'C','h','i','n','a'}; //str实际为"China\0",占6个字节;
char str[] = "China"; //str实际为"China\0",占6个字节;
char str[5] = {'\0'}; //初始化为全'\0', str = {'\0','\0','\0','\0','\0'} ;char str[5];
gets(str); //从终端输入字符串
scanf("%s", str);//字符数组只能在定义时整体赋值,不可以先定义,后整体赋值,下面的代码是错误的;
char str[5];
str = "China"; //编译不通过;
3.3 字符串
C语言中,字符串作为字符数组来处理,为了标志字符串的有效长度,系统会自动在有效的字符串之后加一个’\0’字符作为结束标志。对于字符串常量,系统也会自动在最后加一个’\0’字符,所以字符串在内存中的长度要多一个字节。在程序中,系统也通常通过’\0’字符来判断字符串是否结束,只要遇到一个’\0’,就认为该字符串到此结束了,并只计算’\0’之前的字符长度作为字符串的有效长度。
说明:字符数组并不强制要求它的最后一个字符一定为’\0’,而是根据实际情况而定。如一下的表示都是合法的:
char c[5] = {'C', 'h', 'i', 'n', 'a'}; //c中没有'\0'
char c[6] = {'C', 'h', 'i', 'n', 'a', '\0'};
‘\0’是字符串结束的标志,所以使用时为了对字符串处理方便,最好都加上’\0’。
3.4 字符串处理函数
C函数库提供的常用字符串处理函数。
char a[] = "Hello";
char b[20] ;puts(b); //终端输入:"World"
gets(a); //终端输出:"Hello"strcat(b, a); //连接b,a,将结果放入b中,返回数组b的地址;strcpy(b, a); //将a的字符串复制到b中;
strncpy(b, a, 2); //将a的前2个字符代替b中前2个字符,但需要b的有效字符长度不小于2;strcmp(a, b); //若a == b,返回0; 若a > b,返回正整数;若a < b, 返回负整数;strlen(a); //返回字符串a的有效长度;strlwr(a); //将a中大写字母换成小写字母;
strupr(a); //将a中小写字母换成大写字母;
4. 数组作为函数参数
4.1 数组元素作函数参数
与变量做参数一样,都是单向传递,即“值传递”方式。
4.2 数组名作函数参数
- 数组名表示数组首元素的地址,所以数组名作为函数参数不是单向传递,而是将实参数组的首元素地址传入函数,可以通过函数改变实参数组的元素内容。
- C语言编译时,只对函数形参的个数、类型做检查,并不会检查数组的大小,所以在申明/定义函数时,形参数组可以不写数组的长度,例如:
void fun(int a[]);
void fun(int a[10]); //二者等价
- 数组名表示数组首元素地址,所以形参也就可以写成指针的形式:
void fun(int * a);
- 多维数组名作函数参数
多维数组作为形参可以省略第一维的大小说明,但第二维、更高维的大小不可省。
void fun(int array[3][4]);
void fun(int array[][4]);
多为数组名作为实参,第一维大小可以与形参数组不同,但更高维需一样。