7、数组
数组其实就是实现将“离散变量”变成“连续变量”。
1、一维数组
1、数组的变量名表示数组在内存中的起始地址,也是数组第一个数组元素在内存中的地址。
2、[] 是数组的标志,其中间必须是整型常量或整形常量表达式。
3、数组所占内存单元的字节数=数组大小×sizeof(数组元素类型)。
4、a[10]; //a[0]=1; a[10]={}; //a[0]=0;
5、memset函数可实现对某内存块的各字节单元整体赋同样的值。注意:是对内存的每个字节单元都赋值。如果它是2字 节,就是每个字节都赋值。所以其主要适合于字节型数组的整体赋值,当然也可以对非字节型数组进行清0。
(void *memset(void *s,char ch,unsigned n))
6、memcpy函数可以实现数组间的赋值。最好数组长度一样。
(void *memcpy(void *d,void *s,unsigned n))
7、一般来说 全局变量、静态变量处于数据区,默认初始化为0 (如果指定初始值,则为指定的值)
而局部变量处于堆栈区,其数值是随机的,即当时内存中的值。(默认为0为什么初始化的理由。)
2、二维数组
1、多维数组元素有多个小标,以标识它们在数组中的位置,所以也称为多下标变量。
2、系统必须知道第二维的大小,不能省略。
3、初始表中至少包含一个初值。例如:int a[2] [3]={{},{1,2,3}}; 错误 int a[4]={}; 错误
3、字符串与数组
1、字符串是一种以’\0‘结尾的字符数组。(“china” == {‘c’,‘h’,‘i’,‘n’,‘a’,‘\0’} == {“china”} != {‘c’,‘h’,‘i’,‘n’,‘a’})
2、在用字符数组来存放某个字符串常量时,如果要指定字符数组的大小,那么其大小至少要比字符串的长度大1,用以存 放’\0‘。
3、gets函数能接受包含空格字符的字符串,但定义字符数组时其长度一定要足够长,以便保存整个字符串和其结束标志。 它会覆盖先前的字符串。如:char ss[10]=“12345”; gets(ss); //输入 abc 结果为 abc
4、scanf函数输入字符串会忽略前导空格,遇到空格或回车符输入操作就终止了。为了避免输入的字符串长度超过数组的 大小,可以在调用scanf函数时使用%ns格式控制符,整数n表示域宽限制,如果没有遇到空格,输入n个字符后停止。
5、puts函数输出时将字符串结束标志’\0’ 转换成换行符’\n’。
6、strlen函数返回字符串中包含的字符个数(不包含’\0’)。
7、strcpy函数将字符串2复制到字符数组1中(包含字符串结尾符’\0’)。
8、strncpy函数将字符串2的前n个字符复制到字符数组1中去,但未在末尾加’\0’。
9、strcmp函数将两个字符串逐个字符比较其ASCII码大小,前者大返回正整数,相等返回0,后者大返回负整数。
10、stricmp函数比较两个字符串时不区分大小写。
11、strncmp函数将字符串1前n个字符的子串与字符串2前n个字符的子串进行比较。
12、strcat函数将字符串2连接到字符数组1的后面(包括结尾符’\0’)。