c语言笔记-------数组

=数组
数组: 一系列相同类型数据的集合
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])
{

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值