1,一维数组
格式:数组类型 数组名[数组大小];
数组大小必须是整型常量,不能是变量
访问形式:
数组名称[下标]
⚠️;只能访问下表0~size-1
数组没有赋值的部分默认为0;如果数组一开始都没有赋值,就没个元素都可能是一个随机数,而不是默认的0
如果想把整个元素都赋值初值0,那么只需要吧第一个元素赋值为0,或者只用一个大括号来表示。
eg. int a[10]={0};
int a[10]={ };
2,不断的让后一位的结果由前一位或者前若干位计算得来,把这种做法成为递推。
递推分为顺推和逆推。
3,二维数组
格式:
数据类型 数组名[第一维大小][第二维大小]
访问:
数组名[下标1][下标2]
⚠️如果数组大小比较大(大约10^6),则需要将其定义在主函数的外面,否则会异常退出。
因为函数内部申请的是局部变量来自栈系统,允许申请的空间比较小;
而函数外部申请的全局变量来自于静态存储区,允许申请的空间比较大。
4,对数组的每一个元素赋相同的值
memset函数:
格式:
memset(数组名,值,sizeof(数组名));
⚠️加头文件string.h
只建议初学者使用memeset赋值0或-1,因为它是按字节赋值,即对每个字节赋相同的值
如果要对数组赋其他数字,使用fill函数()
5,字符串数组
可以像普通数组一样初始化,
eg,char str[15]={‘G’,’o’,’o’,’d’,’ ‘,’s’,’t’,’o’,’r’,’y’,’!’};
字符串也可以直接赋字符串初始化(仅限于初始化,程序的其他的位置不允许这样直接赋值整个字符串)
eg.char str[15]=“Good story!”;
6,字符串的输入输出
A,scanf、printf
%s 识别空格作为字符串的结尾,scanf使用%s,后面对数组名是不需要加取地址符&;
%c 能够识别空格和换行,将其输入。
B,getchar()、putchar()
getchar和putchar用来输入和输出单个字符
C,gets()、puts()
使用gets()来输入一行字符串(⚠️gets识别换行符
作为输入,因此在使用完scanf一个整数后,如果要使用puts,要先使用getchar接收整数后面的换行符),并将其存入一维数组(合作和二位数组的一维)中;
puts用来输出一行字符串,即将一维数组(或二维数组的一维)在界面上输出,并紧跟一个换行。
eg.
int str2[5][10];
for(int i=0;i<3;i++){
gets(str2[i]);
}
就是使用for循环把三个字符串分别存入str2[0]、str[1]、str[2]中
7,字符串数组的存放方式
字符串数组每一位都是一个char字符,在一维数组(或是二维数组的第二维)的末尾都有一个空字符 ,以表示存放字符串的结尾。
空字符 在使用gets和scanf输入字符串时会自动添加在输入字符串后面,并占用一个字符位,而puts和printf就是通过识别 作为字符串的结尾来输出的。
⚠️:结束符 的ASCII码是0,即空字符NULL,占用一个字符位,因此字符数组的长度一定比实际存储字符的长度至少多一;
int型数组的末尾不需要加 ,只有char型数组需要。