C语言之数组
1.一维数组
1.数组的概念
数组:
1.类型相同的数据元素的集合。
2.这个类型可以是基本的数据类型,也可以是”构造类型
3.这些数据元素只能顺序的存放在内存的某段区域
int a[50]//相当定义了50个int型的变量,数组是相同类型变量的集合
2.语法(数组长度不能是小数)
1.类型名 数组名1[EXP],数组名2[EXP]…
2.int c_score[1000];//相当于定义了1000个int型变量
3.int mysql_score[1000], s_score[1000]:
3.数组的初始化
数组的定义:类型名 数组名[数组元素个数]={初值1,初值2}
int a[10]={初值1,初值2};
1.全部赋初值
int score[5]={90,80,85,80,75};
2.部分赋初值
int score=[5]={90,80};//未赋初值的元素默认为0;
3.省略长度赋初值
int score[]={90,80,85,95};
4.错误案例
int arr[3]={90,80,5,95,5};//超过定义的长度会报错
5.出现小数怎麽办
int arr[3]={90,80.5,95.5};
例如如果出现小数,但是定义的是整形,那么显示的是省略小数的整形,如arr[0]=90;arr[1]=80,arr[2]=95
6.没有赋初值
int b[5];
b[0]是0吗?,显然不是的,没有赋初值吧b[0]是未知数
4.一维数组的存储
1.数组的定义相当于在内存中开辟连续的空间.
保存在数组中的字节数字节数与定义的变量类型有关
int a0;
int arr[size];//相当于定义了5个int型 ,每个占4个字节,总大小5*4=20字节
printf("%d\n",sizeof(a0));
printf("%d\n",sizeof(arr));
数组中的存储从10开始但是存储是从0开始
下标,比实际多1
int a[10]
5.数组的引用
1.引用普通变量时,直接使用变量名,引用数组是,使用数组名[下标]
2.一维数组作为函数参数
数组作为参数,可以理解为形参和实参数组共享一块内存空间
当调用数组的时候,形参发生改变,实参也发生改变
3.二维数组的引用也是如此,唯一区别的是二维数组使用双下标,
注意 下标从0开始,不要越界.
6.二维数组的定义
二维数组的定义跟一维数组差不多
int a[3]//定义了长度为三的整形一维数组,相当于定义了一行,但是分为好多格子
int b[3][4],定![8](C:\Users\32059\Desktop\截图\数组\8.png)义了一个三行四列的二维数组,相当于定义了一个表格
!
7.二维数组的存储
第一行相当于a`[0][n]`n最大为3
第一列相当于a[n][0],n最大值为3
总字节大小等于数据类型乘以行乘以列,二维数据占据大量连续的空间地址
8.二维数组的初始化
1.按行全赋值
int a[2][3]={{10,20,30},{40,50,60}};//大括号里面的为1行
2.按存储顺序全部赋初值
int a[2][3]={100,200,300,400,500,600};
3.部分赋初值
int a[2][3]={10,20,40};//按照存储顺序赋初值,只不过没赋初值的为0;
4.按行部分赋初值
int a[2][3]={{10,20},{40}};
5.省略行数赋初值
int a[][3]={{1,2,3},{4,5,6},{7,0,0}};
int a[][3]={10,20,30,40,50,660,70};
注意 不能省略列数
在省略中必须行数必须有值,不能没有,可以为0
int a[3][4]={{1,2,3,4},{0},{7}};
此处0不可以不写,就算没有值,也要写0;
9.二维数组的遍历
int a[3][4]={{1,2,3,4},{0},{7}};
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
printf("%d",a[i][j])
}
}
int a[3][4]={{1,2,3,4},{0},{7}};
此处0不可以不写,就算没有值,也要写0;
9.二维数组的遍历
int a[3][4]={{1,2,3,4},{0},{7}};
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
printf("%d",a[i][j])
}
}