C- 数组

目录

一、一维数组的创建和初始化

1.数组

2.一维数组的创建

3.一维数组的初始化

1.整数类型的数组

2.字符类型的数组

4.一维数组的使用

5.地址

二、二维数组的创建和初始化

1.二维数组的创建

2.二维数组的初始化

​编辑3.二维数组的使用

 4.二维数组在内存中的储存

三、数组越界

四、数组作为参数函数

五、数组名

1.数组名是首元素的地址。

 2.数组名是首元素的地址,但是有2个例外。



一、一维数组的创建和初始化

1.数组

数组是由数据类型相同的一系列元素组成。

2.一维数组的创建

type_t   arr_name  [const_n]

type_t           是指数组的元素类型

arr_name       数组的名字

[const_n]             常量表达式,用来指定数组的大小(通常默认必须是常量,但在C99语法中支持变量,即变长数组)

例:int arr1[10];  //内含10个int类型元素的数组

char ch[5];   //内含5个char类型元素的数组

3.一维数组的初始化

数字的初始化是指,在创建数组的同时给数组的内容一些合理初始值。

1.整数类型的数组

在不完全初始化时,其余元素默认为0。

int arr3[ ] = {1,2,3,4,5};    //未标注的情况下,会根据花括号中的内容,元素个数默认为5

2.字符类型的数组

 

  • 字符数组以\0结尾。
  • 在不完全初始化时,其余元素默认为0(或\0)。
  • 字符用单引号引起来,字符串用双引号引起来。

同理,长度也是如此。

42是一个随机值。 

4.一维数组的使用

要访问数组中的元素,通过使用数组下标数(也称为索引)表示数组中的各元素。

数组下标是从0开始的。

对于一维数组的基本访问:

5.地址

  • 一维数组在内存中是连续存放的
  • 随着数组下标的增长,地址是由低到高变化的

 正是因为一维数组在内存中是连续存放的,所有能通过p++,打印整个数组。

二、二维数组的创建和初始化

1.二维数组的创建

int arr1[3][4];  //3行4列
char ch1[2][3];  //2行3列

2.二维数组的初始化

3.二维数组的使用

二维数组的使用是通过下标的方式。

例:打印二维数组

思路:通过下标访问数组。

 4.二维数组在内存中的储存

打印数组中每个元素的地址,可以发现:

  • 二维数组在内存中也是联系存放的
  • 一行内部是连续的,跨行也是连续的

这也说明,二维数组在内存中的存放,可能并非我们想象的那么立体。

那么如何检验二维数组确实在内存中连续存放呢?

如图所示,通过数组元素的地址来打印数组,证明了数组的地址在内存中是连续存放的。

数组名 

三、数组越界

数组的下标是有范围限制的。

数组的下标规定,从0开始,若数组有n个元素,最后一个元素的下标是n-1。

如果数组的下标小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

C语言是不对数组下标做越界检查的,编译器不一定会报错,需要程序员写代码时,自己做越界检查。

四、数组作为参数函数

例:对数组中的元素进行排序,从小到大

 优化:

注:int sz = sizeof(arr) / sizeof(arr[0]); 不能放在函数里去计算。因为数组传参的时候,传过去的不是整个数组,传过去的是数组首元素的地址,即形参arr的本质是指针,传过去之后,无法计算出正确的sz。

五、数组名

1.数组名是首元素的地址。

 2.数组名是首元素的地址,但是有2个例外。

  • sizeof(数组名)-数组名表示整个数组,计算的是整个数组的大小,单位字节。

  • &数组名 -数组名表示整个数组,取出的是整个数组的地址。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值