数组
一维数组
特点:同一数组中的所有元素都属于同一种数据类型,数组元素用数组名和相应的下标来确定。
定义格式:类型名 数组名[常量表达式];
注意:
- C语言每个数组在内存中分配空间时是连续分配的。
- 定义数组时方括号中的表达式不能含有变量,表达式的值必须要大于零且为正整数。
引用格式:数组名[下标]
注意:
- 不能整体用只能单独引用其中的元素。引用时的下标可以是表达式。
- 数组的下标在(0—N-1)
初始化格式:类型名 数组名[常量表达式]={初值1,初值2,...};
注意:
- 多则出错,少则补0.
- 定义赋初值的个数等于数组长度,则数组长度可以省略。
- 一个都不给则是随机值。
- 只能在定义数组的同时用{ }给数组元素整体赋值。
二维数组
定义格式:类型名 数组名 [行数-常量表达式][列数-常量表达式2]
注意:
- 定义数组时方括号中的表达式不能含有变量,表达式的值必须要大于零且为正整数。
- 在内存中二位数组的存放也是连续的,先行后列原则。
引用:数组名[行下标][列下标]
注意:
- 不能整体用,只能引用其中的元素。
- 引用时必须有行下标和列下标两个下标,从0开始依次加1
初始化:
- 将初值依序放在一对{ }中,与一维初始化格式相同
- 定义二维数组的同时,按行初始化每一行初值均用一对{ }括起,采用嵌套的{ }格式。
注意:
定义数组的同时给数组初始化,则可以省略行数,但列数不能省略。
字符数组
C语言中没有字符串变量,如何存储?
- 字符数组来存放
- 字符型指针变量
初始化:与其他数组的初始化方式一样,只是其初始值是字符。
字符串:因为字符串最后都有一个字符串结束符(‘\0’),所以用字符数组来存放字符串时一定要有一个元素存放结束符‘\0’
注意:
- 字符串常量后有一个‘\0’
- 用字符串给一字符数组初始化有三种情况:
- char a[ ]="abcd"; (双引号加'\0')
- char a[ ]={"abcd"};
- char a[ ]={'a','b','c','c','d','\0'}'(单引号需要自己加‘\0’)
字符串存储(赋值)四种方法
方法1:scanf();键盘输入
char a[10]; scanf("%s",a); 数组名本身就是地址
scanf("%s",&a); 非法
注:用%s格式输入时,遇到空格符或回车符则自动结束输入
scanf(“%s,%s”,a,b)不能正确读取数据
printf()输出
注意:输出时则从当前地址开始知道遇到结束符‘\0’为止
方法2:gets()键盘输入
格式:#include<stdio.h>
gets(字符数组)
功能:读取一个字符串赋给字符数组
注:
(1)用该函数输入字符时,只有遇到回车符系统才结束读取字符
(2)不论是用%s还是gets()在输入时均不需要输入双引号,若输入时用了双引号则双引号也作为字符串的有效字符。
puts()输出
格式:#include<stdio.h>
puts(字符数组或字符串常量)
功能:在屏幕上输出字符数组中的字符
注:用该函数输出与%s格式输出一样,只是该函数将‘\0’转成‘\n’输出
方法3:初始化
方法4:strcpy()
字符串处理函数
strcat()
格式:#include<string.h>
strcat(字符数组1,字符数组2);
功能:连接
返回的是第一个数组的首地址
strcpy()拷贝
格式:#include<string.h>
strcpy(字符数组1,字符数组2)
功能:将字符数组2中的字符串替换到字符数组1中,函数值为字符数组1的首地址。
strcmp()比较
格式:#include<string.h>
strcmp(字符数组1,字符数组2)
功能:函数返回值相同位置。不同字符的ASCLL码差值
strcmp(“abc”,“abfc”);=>-3
注:不能用关系运算符直接进行字符串大小或字符数组大小的比较
strlen()
格式:#include<string.h>
strlen(字符数组)
功能:求出字符数组的实际长度(不包括结束符)