=数组
数组: 一系列相同类型数据的集合
int a = 5;//存储一个整数
int a[5];//存储5个整型数据
1.含义
申请一整块连续的内存,存储长度一样的相同类型的数据()
补充:构造类型的数据,都是需要连续的内存空间存储
2.如何使用数组
一般形式(定义数组)
int a[5];//定义了一个数组,可以存储5个整型数据
1.int 代表数组里面存储的数据类型
2. a 数组名 ,遵循命名规则,数组首元素的地址 &a[0]????
3.[5] 数组的长度,存储数据的数量
3.数组的初始化
int a = 10;
1.定义后不去初始化
int a[5];//局部变量 初值随机。全局变量 初值为0。
2.直接赋值
int a[5]={1,3,54,78,16}; //
int a[5]={1,3,54};
int a[5]={[1]=55,[3]=66};
如果只初始化其中的部分元素,没有初始化的元素默认也会置零
3.批量初始化
int a[100] = {[0 … 9]=15};
4.柔性数组
int a[] = {1,45,89};
int a[];//编译器无法确定数组的大小,会报错
注意:
定义柔性数组时,必须初始化
作为函数形参时可以不初始化
4.数组作为函数参数的用法
1.变长数组传递方式
void fun(int len, int buf[len])
{
}
2.柔性数组
void fun(int len,int buf[])
{
}
3.地址传递
void fun(int len,int *buf)
{
}
一维数组作为参数,最终计算机识别的都是地址
练习
1.定义一个数组可以储存100个int数据,前30个初始化为123,后30个初始化为456
1.全部打印出来(10*10行列式)
2.再把前10个数据改成0–9
3.打印数组数据时,使用函数打印
总结
1.如果数组定义成局部变量,不初始化,数据默认是随机的
如果数组定义成全局变量,不初始化,数据默认清空的置零的(0)
2.数组不管是局部还是全局变量,只初始化部分元素,其他元素默认为0
对于字符型数组 也是一样的,不初始化,也是随机数,初始化或者部分初始化,没初始化的部分默认为0,'\0'ascii码值就是0
char str[20] = {0}; //清空数组
3.柔性数组要注意:
1.定义的是柔性数组,一定要初始化
2.作为函数形参时不需要初始化
4.定义字符型数组时,初始化:
char str[20] = {'h','e','l'...};//不推荐
char str[20] = "hello";//默认多一个'\0' 推荐使用
二维数组====
int buf[3] = {1, 12, 45};
int buf[2][3] = {{1,2,3},
{4,5,6}};
C语言,本质上是没有二维数组这种数据类型,就是储存了一维数组的一维数组
二维数组的数组元素是 一维数组
int buf[2][3] = {{1,2,3},
{4,5,6}};
1.理解
int buf[2][3] = {{1,2,3},
{4,5,6}};
int 储存的数据类型
[2] 一维数组的个数
[3] 每个一维数组的元素个数
2.初始化
int buf[2][3] = {{1,2,3},
{4,5,6}};//对
int buf[2][3] = {{1,2,3,4},
{5,6}}; //错
int buf[2][3] = {{1,2},
{3,4},
{5,6}};//错
int buf[2][3] = {1,2,3,4};//对
3.访问二维数组
int buf[2][3] = {{1,2,3},
{4,5,6}};//对
buf[0][0] 1
buf[0][1] 2
buf[0][2] 3
buf[1][0] 4
buf[1][1] 5
buf[1][2] 6
4.二维数组作为函数参数
1.变长数组
void fun(int len , int buf[len][3])
{
}
2.柔性数组
void fun(int len , int buf[][3])
{
}
3.地址传递
void fun(int len , int (*buf)[3])
{
}