【C语言笔记】数组

11 篇文章 0 订阅
9 篇文章 0 订阅

目录

一、一维数组(数组基础)

1. 1数组的创建

1.2数组的初始化

1.3数组的使用

一维数组在内存中的储存

二、二维数组

2.1二维数组的创建

2.2 初始化和使用

初始化

使用

2.3 二维数组的存储

三、数组越界

四、数组作为函数参数

4.1 数组名确实能表示首元素的地址

4.2 二维数组数组名的理解

二维数组的数组名也表示数组首元素地址

但二维数组的首元素其实是第一行的地址​

行和列的计算方法

一、一维数组(数组基础)

1. 1数组的创建

数组是一组相同类型的集合

        创建数组eg.

C99标准后,数组长度可以使用变量

1.2数组的初始化

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

可完全初始化或者不完全初始化,若不完全初始化,剩余元素默认为0

若不自定义数组长度,则默认恰好包含初始化的值

        若为字符串(ch4)数组前三位值为abc, 第四位为\0,剩余为0

        若直接初始化为字符(ch3),前三位为abc,其余为0

1.3数组的使用

[]:即下标引用操作符。它其实就数组访问的操作符

        数组下标从0开始:0 1 2 3 4 5 6...

        eg.  for 循环中求下标最大值(sz)

        int sz = sizeof(arr) / sizeof (arr[0] )

一维数组在内存中的储存

仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增

由此可以得出结论:数组在内存中是连续存放的。

二、二维数组

2.1二维数组的创建

注:行可省略,列不可省略

        eg. arr [ ][4]

        因为数组在内存中连续存放,若不规定列的数量,访问时则无法计算坐标

对于二维数组int array[M][N], 说明如下:

  1. M和N都必须为常数,
  2. M代表数组有M行,N代表每行中有N个元素
  3. 其中M可以省略,省略后必须给出初始化表达式,编译器从初始化结果中推断数组有多少行
  4. N一定不能省略,因为N省略了就不能确定一行有多少个元素,也不能确定数组有多少行

2.2 初始化和使用

初始化

使用

二维数组使用时可以理解为一个矩阵

2.3 二维数组的存储

  1. 二维数组在内存中连续储存,同一维数组
  2. 可以理解为数组的数组

        eg. 

        (例子中)内层数组名为arr[0], arr[1], arr[2]

这两个数组(分别为一维和二维)在内存中完全相同

仅有访问方式有区别

三、数组越界

  1. 数组的下标是有范围限制的。
  2. 数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。
  3. 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
  4. C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,所以程序员写代码时,最好自己做越界的检查。

四、数组作为函数参数

往往我们在写代码的时候,会将数组作为参数传个函数

比如:要实现一个冒泡排序函数将一个整形数组排序。

        数组传参只会传数组首元素的地址,所以如果在函数内计算数组大小,大小为4字节,等于首元素的大小

        所以 sz (数组长度)应在函数外部计算,再传过去

4.1 数组名确实能表示首元素的地址

但是有2个例外:

  1. sizeof ( 数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址

4.2 二维数组数组名的理解

  1. 二维数组的数组名也表示数组首元素地址

  2. 但二维数组的首元素其实是第一行的地址

  3. 行和列的计算方法

    1. 行数:用整个数组大小 / 首行大小

    2. 列数:首行大小 / 首元素大小

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值