索引:
1.一维数组
2.二维数组
一维数组
1. 数组的创建
在csdn上敲这种代码太单调了 博主就上传截图啦
通过调试不难发现,数组的其他数字是0。所以,我们在创建数组的时候都可以这样,在刚开始不知道初始化成什么的时候,直接初始化0,例如这样:int arr[143] = {0},在后期用的使用在改成相应的变量就可以了,因为如果不初始化,直接就一个int arr[143];那么数组里面是随机值,不确定的话代码容易出现无法预测的错误,因此我们要养成一个好习惯
![](https://img-blog.csdnimg.cn/45544e7f28a7484f82a0743c26862a63.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY3h5X3pqdA==,size_20,color_FFFFFF,t_70,g_se,x_16)
3.数组的使用:
举个例子吧:
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的调试看一下
我们可以看到二维数组其实排列跟我们想象的差不多,但是粗存呢??
观察一下发现其实二维数组的储存好像跟一维数组差不多诶
所以
其实二维数组应该是这样排列的,就按照我们设置的这个数组来说,一共两行,一行三列,所以我在图中也画出来了,如果省略列的话,那数组在空间中该如何储存呢?反之,如果省略行,数组只需要知道什么时候开始新的一行,直到完全储存完为止。