【C语言】数组 笔记

85 篇文章 0 订阅
24 篇文章 0 订阅

目录

一维数组(数组基础)

数组的创建

数组的初始化

数组的使用

二维数组

创建

行可省略,列不可省略

原因

初始化

使用

二维数组的存储

数组越界

数组作为函数参数

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

二维数组数组名的理解

行和列的算法

行数

列数


一维数组(数组基础)

数组的创建

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

创建数组eg.

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

数组的初始化

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

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

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

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

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

数组的使用

  1. [],下标引用操作符。它其实就数组访问的操作符
  2. 数组下标0 1 2 3 4 5 6...
  3. for 循环中求下标最大值(sz)

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

一维数组在内存中的储存

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

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

二维数组

创建

行可省略,列不可省略

eg. arr [ ][4]

原因

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

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

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

初始化

使用

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

二维数组的存储

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

        内层数组名为arr[0], arr[1], arr[2]

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

        仅有访问方式有区别

数组越界

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

数组作为函数参数

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

        比如:我要实现一个冒泡排序(这里要讲算法思想)函数将一个整形数组排序。

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

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

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

但是有2个例外:

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

二维数组数组名的理解

  1. 二维数组的数组名也表示数组首元素地址
  2. 但二维数组的首元素其实是 第一行的地址

行和列的算法

行数

整个数组大小 / 首行大小

列数

首行大小 / 首元素大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值