1、定义方式:类型 数组名[常量表达式][常量表达式]
2、实质:二维数组相当于一个n×m的表格,其中n为行数,m为列数
3、内存中的存放方法:按行存放,即在内存中先顺序存放第一行元素,然后存放第二行元素……
4、初始化方法:
①按照每行使用一个花括号来分行给二维数组赋初值;
如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},即类似于获得如下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},即类似于获得如下3×4的表格:
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
③可以对部分元素赋初值,则其它元素使用默认值自动填充;
④如果对数组中的所有元素都已赋初值,则定义数组时可以不指明第一维的长度,但第二维的长度不能省略。
如:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12}
三、字符数组
1、定义方式:char 数组名[常量表达式]
2、说明:
①定义字符数组时不进行初始化,则其中各个元素的值是不可预料的;
②用于初始化数组元素的值如果大于数组的长度,则按语法错误处理,如果小于数组的长度,则未赋初值的
元素自动定为空字符。
四、字符串
1、C语言中,将字符串作为字符数组来处理。
2、C语言规定以字符\0作为字符
串结束的标志。
3、如果指明了字符数组的长度,则作为字符串使用时,该长度至少要比实际长度大1。
如:char msg[5]=”China”;是不正确的,因为需要在末尾加入\0字符;因此,应当定义为char msg[6]。
4、\0是作为字符串结束的辨别标志,如果未显示添加,则由系统自动添加;
5、程序运行时以遇到的第一个\0作为结束标志,后面如果还有字符则直接忽略,使用scanf输入时,空格即为\0,如果显示使用\0反而被看着是两个字符,但如果确实需要这样用的话,可以在输入时加单引号,即:输入’\0’。
如下面的代码:
#include <stdio.h> int main() { char a[10]; scanf("%s",a); if(a[5]=='\0') { printf("这里是结束字符\n"); } if(a[4]=='o') { a[4]='\0'; } printf("%s",a); } | 由于第6个字符是空格,因此,a[5]==’\0’的条件成立,输出“这里是结束字符”;后面由于a[4]=’o’的条件也成立,因此将该字符替换成了\0字符,则后续字符不再输出。 |
6、字符数组的输入输出
①逐个字符输入、输出,用格式符%c;
②将整个字符串一次输入、输出,用格式符%s。
这种输入、输出的缺点在于,当输入中出现空格时,系统认为用户已经输入完毕,因此,空格后面的重要信息将被舍弃。
针对这个问题,我们可以借助字符处理函数gets()和puts()来解决。
7、字符串处理函数
①gets(字符数组):输入一个字符串到字符数组,字符串中出现的空格按’’输入,而不是’\0’;
②puts(字符数组):将一个字符串输出到终端;字符串中出现的空格按’’输出,而不是’\0’;
③strcat(字符数组1,字符数组2):连接两个字符串,结果放在字符数组1中;
④strcpy(字符数组1,字符数组2):将字符数组2复制到字符数组1中;
⑤strcmp(字符数组1,字符数组2):比较字符串1和字符串2;
⑥strlen(字符数组):测试字符串的实际长度,即不包括\0字符;
⑦strlwr(字符串):将字符串中的大写字母换成小写字母;
⑧strupr(字符串):将字符串中的小写字母换成大写字母。
关注微信公众号「工控编程与应用」,在手机上阅读所有教程,随时随地都能学习。本公众号每日更新,坚持原创,凡事有态度。