最强数组学习之路

索引:

1.一维数组

2.二维数组

一维数组

1. 数组的创建

数组是一组相同类型元素的集合。
数组的创建方式:
数组创建的实例:
注: 数组创建,在 C99 标准之前, [] 中要给一个 常量 才可以,不能使用变量。在 C99 标准支持了变长数
组的概念。
type_t   arr_name   [ const_n ];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小
eg:int arr [10];
        char arr[29];
        
注* char arr[n];
n是变量 这时候数组arr被称为变长数组,但是一般情况编译器是不支持这个东西的,因为是在c99标准后加入这个概念的,所以写的时候我们尽量写常量吧
2.数组的初始化

   在csdn上敲这种代码太单调了 博主就上传截图啦 

 通过调试不难发现,数组的其他数字是0。所以,我们在创建数组的时候都可以这样,在刚开始不知道初始化成什么的时候,直接初始化0,例如这样:int  arr[143] = {0},在后期用的使用在改成相应的变量就可以了,因为如果不初始化,直接就一个int arr[143];那么数组里面是随机值,不确定的话代码容易出现无法预测的错误,因此我们要养成一个好习惯

再举一些例子

3.数组的使用:

1. 数组是使用下标来访问的,下标是从 0 开始。
2. 数组的大小可以通过计算得到

举个例子吧:

int arr[5] = {1,2,3,4,5}

但他们的下标是 0,1,2,3,4

 4.计算数组的大小

计算数组的大小有时候既可以用strlen  也可以用sizeof计算

博主在这再次阐述一下strlen 与sizeof的区别吧

strlen 其实是一个库函数,它只能测出字符串长度的大小,并且只能针对字符串,针对的是看字符串中是否有“\0”然后讲\0前面的大小测出来

sizeof:本质是一个操作符(运算符),它是用来计算变量内存所占空间的大小,任何类型都可以使用,不关注是否有\0,说到这,还是上点代码,更能理解哈!

 因为“zjt”其实在电脑里面表示的是{‘z’,‘j’,‘t’,‘\0’};

使用用strlen和sizeof测试dy2的长度才会不一样

然后要注意的是在使用strlen时候要加一个头文件<string.h>

差点忘记啦!

还有一种方式可以测数组的大小

int arr[10] = {1,23,4,5};
int sz = sizeof(arr)/sizeof(arr[0]);

所以你会了嘛?

那你可以用sizeof这个函数   int arr[10] = {1,2,3,4,5};

发现会出现什么

你肯定以为是10 或则是5

其实不然

40 = 10*4;

10:表示这个数组所开辟的空间是10

4:一个整型所占空间就是四个字节

上个例子之所以那么巧是因为char字符型本身所占的空间就是一个字节

所以如果不是char类型数组

 int sz = sizeof(arr)/sizeof(arr[0]);我们用这个

是char类型的话 ,可以直接

int sz = sizeof(arr):

5.一维数组的储存

了解数组如何存储的,为以后操作使用它打下基础

eg:

 然后我们用一个for循环把地址打印出来看看

说明一下 打印地址需要的是%p;

 

 我们可以看到前面一个字符串的地址每个相差的是四个字节,而后面的一个字符串的每个地址相差的是1个字节,再往前面看看,一个是int 一个是char 应该就可以理解了吧。

而且我想阐述的一点就是数组在内存中是连续储存的,这点对我们做题非常的有帮助。

之前讲过    如果:int*p = &a;

                            那么实际上p就是a的地址 ,并且*p  = a;

而且现在我们知道数组在内存中是连续储存的

我们便可以通过解引用操作符同样把地址打印出来

 

 我们可以看到 一模一样      再一次证明了数组在内存中是连续储存的。

2.二维数组

一维数组搞定了,现在我们来到了二维数组

其实我觉得跟数学差不,二维数组,就跟数学的坐标差不多吧

横纵坐标都是一样的  二维数组大致如下

 

 二维数组的初始化

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

有人要问 ,一维数组中数组的大小可以直接省略,那么二维数组呢?

在这之前普及一个只是【x】【y】;假设这是二维数组后面的两个表示数组大小的数字,

那么x表示行,y表示列,并且我们在初始化二维数组的时候可以省略行但是不能省略列

下面我们通过二维数组的储存来阐述,先通过vs2019的调试看一下

 我们可以看到二维数组其实排列跟我们想象的差不多,但是粗存呢??

 观察一下发现其实二维数组的储存好像跟一维数组差不多诶

所以

 

其实二维数组应该是这样排列的,就按照我们设置的这个数组来说,一共两行,一行三列,所以我在图中也画出来了,如果省略列的话,那数组在空间中该如何储存呢?反之,如果省略行,数组只需要知道什么时候开始新的一行,直到完全储存完为止。

 

注****
数组的下标是有范围限制的。
数组的下规定是从 0 开始的,如果数组有 n 个元素,最后一个元素的下标就是 n-1
所以数组的下标如果小于 0 ,或者大于 n-1 ,就是数组越界访问了,超出了数组合法空间的访问。
C 语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就
是正确的,
所以程序员写代码时,最好自己做越界的检查
稍后我会更新有关数组的一个算法——冒泡序列
动动小手点赞吧!!!
  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天少点debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值