初识C语言·数组

1:数组的基本概念

2:数组的创建,初始化,类型

3:一维数组的使用和存储方式

4:二维数组的使用和存储方式

5:sizeof在数组中的使用


数组是一个由多个相同元素组成的集合,所以注意点可以有 元素个数 和 元素类型,

数组分为一维和多维数组,多维数组常见的是二维数组,更高层次的我们放在后面介绍


创建一个数组的基本方式是 

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的,现在走个过场。


感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值