一、一维数
1.定义:
数组类型 数组名称[数组大小]
注:数组大小不能为变量
数组大小不能为浮点型
数组大小不能超过为表达式
2.引用:
数组名[下标]
注:
下标最小值为0,最大值是数组大小减一
3.赋值(可以先定义之后再一一赋值/定义的时候一起赋值)
a,赋初值,具体格式。
数组名[常量表达式]={表达式1,表达式2,……表达式n};
注:
1~"="表达式后面必须是{ }其中的表达式用,分割。
2~表达式的个数不能超过数组变量的大小
3~表达式1是赋给第一个数组元素的值,表达式二是赋给数组第二哥元素的值,以此类推
4~如果表达式的个数小于数组大小,则未指定的数组元素被指定为0。
5~~如果当对所有数组元素赋初值时可以省略数组变量大小,此时数组默认元素数量就为表达式数量
例如~3
定义为整型
int a[5]={0,1,2,3,4};//经过定义和赋值后
a[0]=0,a[1]=1,……,a[4]=4
定义为字符型
char a[5]={'s','dasb','sa6','ss','lll'};//经过定义和赋值后
a[0]='s',……
例如~5
int a[]={6,6,6};//那么a[]就有三个数组元素
注
c语言中除了在定义数组变量的时候可以用初值列表对整体赋值以为,无法再对数组整体赋值
例,下面写法错误
int a[5]
a={1,2}//错误❌
a[5]={1,2,3,4,5}//错误❌
a[]={1,2}//错误❌
a[5]={1,2,3,4,5}//❌
<
❌a是数组名,表示数组在内存中的首地址不能被赋值
❌=右边的不是合法的表达式
❌只有定义数组时才可以数组名[]
❌a[5]是越界行为,在前文中定义了a[5],实际存在数组元素只有a[0],a[1],a[2],a[3],a[4]这五个数组元素,定义时5表示有几个数组元素
>小总结,在c中在数组定义后,只能对数组一一赋值。
赋值方法
一,列举赋值
1. 使用赋值语句来赋值。
int a[3];
a[2]=3;
char name[3];
name[2]='sb';
2. 使用循环语句来赋值。
将数组a的各元素赋值成奇数
int a[5],i;
for(i=1;i<=10;i++)
a[i]=2*i+1;
按顺序接收用户键盘输入赋值
int a[10], i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
不能用scanf函数对数组整体输入赋值
int a[3];
scanf("%d%d%d",&a)//错误
如果非要一次赋值
int a[3];
scanf("%d%d%d",&a[0],&a[1],&a[2]);//正确
3. 使用memset函数来赋值(头文件必须包含"string.h")
char name[10];//定义字符数组名称为name,大小为10。
memset(name,'sb',10);
4. 使用memcpy函数实现数组间的赋值(头文件包含"string.h")
//该函数为何引用
//如果把a[6]数组的所有值赋给b[6]数组,虽然我们可以利用循环
int a[6]={0,1,2,3,4,5}, b[6], i;
for(i=0;i<6;i++)
b[i]=a[i];//但是非常麻烦,所以我们可以用memcpy函数
memcpy(b,a,6);//把数组a的值全部赋给数组b