【C语言】数组

引言

学习循环的时候,学过这样的一个例子:如何写一个程序计算用户输入的数字的平均数?

当时写的时候可以这样写:

int x;//初始化变量

double sum=0;//求和

int cnt=0;//计数

scanf("%d",&x);//用户输入数字

while(x!=-1)//当用户输入的值不等于-1时,默认一直输入,直到用户输入一个-1结束循环。

{

sum+=x;//sum=sum+x 把每次输入的数字求和放到sum里面

cnt++;//计数次数++,放进去一个数 cnt=cnt+1 为了求平均数用

scanf("%d",&x);//再输入x 从而进入循环

}

if(cnt>0)//只要输入数字的次数大于0,也就是用户输入了数字,就可以打印平均数,平均数等于输入数字的和除以输入的次数

{

printf("%f\n",sum/cnt);

}

这个例子表明,我们不用记录用户每次输入的数字,而是只用把他们加起来,再除以输入的次数,就可以得到他们的平均数。

数组的基本格式

变量名称[元素数量] 类型就是数组中每一个单元的类型

eg: int grades[100]

double weight [20]

元素数量必须是整数。

数组是什么?

数组是一种容器(放东西的东西)特点是:

数组的排列方式就是a[0]、a[1]、a[2]......

所以是从0开始数,即a[0]就表示的是数组中的第一个数字。

这个图就展示了数组的简单运算,比如说赋值,a[2]=a[1]+10就是把数组中的第2个位置上代表的数字,也就是2 加上10 再赋值给数组中第三个位置上的值,所以说计算后,a[2]=12 a[1]=2。结算结果也验证了数组中的位置计数是从0开始计数。a[0]表示的是第一个数,而不是a[1]。

数组的下标从0开始计数,数组不是c语言才有的,fortran语言就有了,但是数组从0开始编号是从C语言开始的,从此之后C-like语言中的数组都是从0开始计数。

数组的大小计算

如何用c语言计算出来数组的大小呢?

 这里用到了比较熟悉的sizeof函数 当计算数组的大小时,只用写sizeof(a) 而不用写成这样sizeof(a[]) 如图所示,可以看到输入了五个int 型变量的数组a的大小是20。

自己打一遍试一试:

 

完整版是这样:

 从这个结果也可以看出来,c语言中数组的位置从0开始算起,其实在fortran语言里面也有这样的运用。所以程序员大多会从0开始算起

 

 

任意一个数组都可以写成这个样子。数组的大小除以数组第一个变量的大小,类似于100个人除以第一个人,就等于100,这个100就是长度。因为数组a的变量类型是确定的,例如int a[]={} ,那么这个数组里面每个变量的类型都是int类型,也就是4个字节长度,打印的时候以%d的形式打印,则就是4个字节长度,那么数组的长度除以第一个变量的大小,就会得到整个数组的长度。

这时候有些长得帅的小伙伴们可能就要问了:欸,恒啊,这结果为什么是20,而不是其他数字啊?

要回答这个问题,我们首先要知道变量在内存中占用的大小。

在内存中存储的数据都是以二进制数0、1的形式存储的,这是因为最开始的计算机,就是由电信号决定的,0表示不通电,1表示通电。数据存储的最基本单位比特 (bit) ,再往上走就是字节(byte),

1byte=8bit。

 通过程序我们可以看出了,一个int 类型,也就是整数类型的变量,在内存中占4个字节,也就是32个比特位。

这个时候我们再去看这个结果

通过运行结果就可以发现,原来数组的大小就是由数组里面有多少个元素组成的,比如说有5个,那就是5个整型,也就是4*5,20个字节大小。并且在观察一个位置上的数字大小,或者说数组中一个位置上的大小时,会发现是4。这个4就代表4个字节。

也验证了我们的想法,也就是在数组定义时候,数字前面的数据类型决定了数组中每一个元素的类型。由此推知——>数组是一个容器,就是起到了一个存储的功能,因为数组前面定义的类型,对数组中的每一个元素都起到了作用。假设一个数组a     int a[],即数组a的数据类型是int,整数形式。所以数组a里面的每一个元素都是整形 形式存在。

代码运行结果很好的证明了我们的想法,即数组的一个位置上的数据的大小是4字节,也就是一个整型变量的大小。

以上就是本次的分享内容了,喜欢我的分享的话,别忘了点赞加关注哟!

如果你对我的文章有任何看法,欢迎在下方评论留言或者私信我鸭!

持续更新中————————————————————————————————————

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张学恒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值