C语言数组详解,终极版本(能看懂文字就能明白系列)文章很长,慢慢品尝

目录

数组的概念

一维数组的创建和初始化

数组的创建

初始化

一维数组的使用

数组下标

数组元素的打印

数组的输入

一维数组的存储方式

计算数组元素的个数

二维数组的概念

二维数组的创建

二维数组的使用

二维数组的输入和输出

 二维数组在内存中的存储


数组的概念


简单来说,数组就是一组相同元素的集合。

数组中存放的是一个或者多个数据,但数组元素个数不能为0且存放的多个数据的类型是相同的

数组分为一维数组和多维数组,其中多维数组以二维数组最为常见,下面先介绍一维数组:

一维数组的创建和初始化


数组的创建


基本语法

type name[常量值];

type是指数组中存放数据的类型,可以是:char short int float 等等,也可以是自定义的类型。

name是指数组的名字,简称数组名,这个可以根据实际情况定义,取得有意义就行了。

[]中的常量值指数组的大小,数组元素的个数。

初始化


数组的初始化分为完全初始化和不完全初始化

例如完全初始化:

int arr [5]={1,2,3,4,5};    []这里面就存储了1 2 3 4 5这五个元素,至于数组是如何存储数据的呢,后面会一一介绍

不完全初始化:

int arr[6]={1}; 这里只初始化一个元素“1”,剩下的元素默认值都为0

当然还有一个错误的初始化:int arr[3]={1,2,3,4};这里面只给arr开辟了三个存储空间,但是我们存储了四个元素,所以这是不行的。

一维数组的使用


学会了一堆数组的基本语法,一堆数组可以存储数据,存储数据的目的是对数据的操作,那我们如何使用一堆数组呢?

数组下标


在C语言中,数组是有下标的,什么是下标,简单来说就是数组的标记(编号),且下边是从零开始的,如下:

在C语言中数组的访问提供了一个操作符[],这个操作符叫下标引用操作符。

使用下标引用操作符可以让我们轻松的访问数组的元素。⽐如我们访问下标为7的元素,我们就
可以使⽤ arr[7] ,想要访问下标是3的元素,就可以使⽤ arr[3] ,如下代码:

数组元素的打印


接下来,如果想要访问整个数组的内容,那怎么办呢?
只要我们产⽣数组所有元素的下标就可以了,那我们使⽤for循环产⽣0~9的下标,接下来使⽤下标访问就⾏了(遍历数组)。

数组的输入

上面只是按照我们定义的数据大小(元素个数)然后从一到十输出,如果要按照自己的需求数据大小输出呢?

一维数组的存储方式

接下来让我们深入了解数组,数组在内存中到底是如何存储数据的呢?

在上面讲到数组是有下标的,也就是编号,好比如学校中的宿舍一样,A栋三楼305宿舍,在C语言中,数组的下标也称地址,也就是C语言后面的重难点——指针

如下图:

(计算机处理的数据都要加载在内存中处理,内存会划分一个个的内存单元——一个字节,然后给每个内存单元编上编号——下标)

我们打印数组的地址看看

从上面的运行结果可以看到,每个地址之间的间隔相差四个字节(因为放的是整型,一个整型是四个字节),也就是说一维数组在内存中是连续存放的,且随着数组下标大小的增长,地址是由小变大的(比如你在二楼204宿舍,你左边是203,右边是肯定是205,数组的存放也是这样)这为后期我们使⽤指针访问数组奠定了基础。

计算数组元素的个数

在C语言中,要如何计算数组元素的个数呢,总不能一个一个的去数吧,这时候我们就要用到一个关键字了——sizeof 可以计算类型和变量的大小,也可以计算数组的大小 注意:这是一个关键字!

代码如上,一个整型是四个字节,一共十个整型,所以打印40个字节(单位是字节)

然后我们又知道数组中所有元素的类型是相同的,所以我们可以先算出数组中总字节数量,再算出一个元素占了多少字节,两者相除就是元素个数了,代码如下:

二维数组的概念

如果我们把一维数组作为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组就是三维数组,二维数组以上的数组称为多维数组。

二维数组的创建

基本语法:type name[常量值1 ] [常量值2 ] ;

例如:
int arr[3][5];
double data[2][8];

上述代码中[3]表示数组有三行  [5]表示数组有五列 int 表示数组的类型,arr表示数组名

初始化:二维数组的初始化也分为完全初始化和不完全初始化

不完全初始化:int arr1[3][5] = {1,2};                                   int arr2[3][5] = {0};

完全初始化:int arr3[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};

如上,二维数组是按照一行一行来初始化的(也就是说先把第一行的位置存放好了再去第二行存储)

当然我们也可以这样初始化:int arr4[3][5] = {{1,2},{3,4},{5,6}};

特别注意的是:初始化可以省略行,但不能省略列(因为当你定义多少列的时候,内存空间已经定义了每一行可以存储多少个元素了,计算机会自动进入下一行存储)

int arr5[ ][5] = {1,2,3};

int arr6[ ][5] = {1,2,3,4,5,6,7};
int arr7[ ][5] = {{1,2}, {3,4}, {5,6}};

二维数组的使用

二维数组的访问也是使用下标的形式的,二维数组是有行有列的,只要锁定了行和列就能唯一锁定数组中的一个元素。

例如:int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

第一行蓝色的数字表示列号,左边的绿色数字表示行号,两者都是从开始的,我们说:第二行,第四列,就能快速的定位出7。

二维数组的输入和输出

二维数组如何输入和输出呢?思路很简单,可以根据上面二维数组的图,先用for循环把行和列依次产生出来,然后输入数据,存储在每一行每一列中,最后输出。

解释:i 表示行号,j表示列号,第一个for循环三次,依次产生(0,j)  (1,j) (2,j) 第一个for循环里面再嵌套一个for循环,循环五次,依次产生(0,0) (0,1) (0,2)…………然后输入数据,第二个for循环输出数据

 二维数组在内存中的存储

从输出结果来看,每一行内部的每个元素都是相邻的,地址之间相差四个字节,跨行位置处的两个元素(如:arr[0][4]和arr[1][0])之间也是相差四个字节,所以二维数组中的每个元素都是连续存放的,如下图

今天的笔记到此结束,我太难了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值