1:数组的基本概念
2:数组的创建,初始化,类型
3:一维数组的使用和存储方式
4:二维数组的使用和存储方式
5:sizeof在数组中的使用
1
数组是一个由多个相同元素组成的集合,所以注意点可以有 元素个数 和 元素类型,
数组分为一维和多维数组,多维数组常见的是二维数组,更高层次的我们放在后面介绍
2
创建一个数组的基本方式是
type arr_name[常量值]
type是数组里面的元素类型,arr_name是给数组取的名字,一般不会取得太奇怪,[常量值]这个表示得是为这个数组开辟了多少空间。
那么 假设现在创建了一个整型类型的数组,为它开辟10个空间,取名为arr
int arr[10]
现在对它初始化,初始化分为两种,完全初始化 和不完全初始化
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
完全初始化好理解,给数组里面的每一个成员全部赋值
int arr[10] = { 1 };
同理,不完全初始化也好理解,这是赋值第一个元素为1,那么其他默认为0
那么是不是不初始化就是全部默认为0呢?
显然不是。
数组的类型也好理解,通过上面的两张图不难发现左右边的类型,写的是int [10],所以数组的类型就是把数组名去掉剩下的部分。
3
一维数组创建好之后,我们做两个简单的事,一个是输入,一个是输出,不用怀疑,要用到循环,可以选择while,但是我们一般选择for循环对它输入输出
int arr[10] = {1};
for(int i = 0; i < 10;i++)
{
scanf("%d",&arr[i]);
}
输入完毕,那么这里涉及到了下标的知识点,[ ]是C语言提供的一个操作符,叫做下标引用操作符。
数组的元素从第一个开始,下标从0开始,所以这里是i < 10而不是等于10。
int arr[10] = {0,1,2,3,4,5,6,7,8,9};
假定arr数组输入了这些元素,那么比如打印arr[3],arr[4],arr[9] ,结果就是3,4,9,不信可以试试。
输入好了这下开始进行输出。
int arr[10] = {0,1,2,3,4,5,6,7,8,9};
for(int i = 0; i < 10; i++)
{
printf("%d ",arr[i]);
}
看看结果?
最基本的使用我们是知道了,那么这些数在内存中是怎么存储的呢?我们把它们的地址全部打印出来看看。
ps:%p是专门打印地址的占位符
不难发现,每个元素之间都差了4,看起来还比较规律。这是因为数组在内存中是连续存放的,而我们创建的是整型数组,一个整型占4个字节,所以每个地址相差4。
即数组元素在内存中是连续存放的。这里也为之后的指针学习奠定了基础。
4
点到线,线到面,数组同理,一维到二维咯,所以可以形象的理解为二维数组是一维数组的集合,二维数组的创建,初始化与一维数组差异不大,好吧有点但不多,看看
int arr[常量][常量] = {{……},{……} };
这个,就是二维数组的基本创建,初识化一样的,一行没有初识化完的,其他都是默认为0,只是每一行的元素用的是{ }括起来,
但是二维数组有个值得留意的是 二维数组省行不省列,说白了就是省略了行,一行几个元素都确定不了,程序直接崩溃了。
看到了吧,小红线,猛猛报错。
话说,二维比一维多了一维,那么二维多用一个for没毛病吧?
刚才提及二维数组是一维数组的集合,那么是不是代表二维数组在内存中的存储是每一行每一行拼接的呢?看看
还是不难发现,元素地址还是连续的,那么这个好像更形象?
抽象中带着一点形象
相同的点还有是下标,二维数组的行和列的下标都是从0开始的,注意注意。
#include <stdio.h>
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
int i = 0;//遍历⾏
//输⼊
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
scanf("%d", &arr[i][j]); //输⼊数据
}
}
//输出
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
printf("%d ", arr[i][j]); //输出数据
}
printf("\n");
}
return 0;
}
这是一个二维数组的输入和输出,应该不难理解吧。
5
sizeof熟悉吧?又见面了
来看看它在数组里面的表现吧。
一维数组中的sizeof
好了这就是sizeof的应用了
sizeof(数组名)表示求整个数组的大小,sizeof(任意元素)求数组中的元素大小,所以可以衍生出来利用sizeof求数组的总元素个数,就是总大小除了每个元素的大小而已咯。
5个元素,一个元素占4个字节,所以总大小是20,单位是字节。
二维数组中的sizeof
这个简单介绍一些就是,arr[2]表示的是第二行的地址,arr[1]同理,所以后面指针介绍二维数组传参的本质会重新讲到sizeof的,现在走个过场。
感谢阅读!