数组初步简单理解


本笔记内容已上传到个人博客网站,建议去个人博客网站观看。
数组初步 | 洛希的智慧之殿堂 (luoxi.work)

数组初步

1.数组的定义

首先我们要了解应该如何去定义一个数组,我们可以通过以下这个形式来进行定义。

类型 数组名 [元素个数]
 int a[6];//整形一个占4个字节
char b[24];//字符型一个占1个字节
double c[3];//浮点型一个占8个字节

注:数组不能动态定义!

比如以下这个错误的代码

#include <stdio.h>
int main ()
{
    int a ;
    printf("请输入字符个数:");
    scanf("%d",&n);
    int a[n];
    return 0 ;
}

对于这串代码就是一个致命的错误,数组是不能进行动态定义的!!!

2.数组元素的访问

当我们定义了一个数组之后,我们肯定是要对数组的元素进行访问的。

那么我们应该如何才能访问数组的元素呢?

我们可以通过以下的形式来进行访问数组里面的元素。

数组名[下标]
    a[0];//访问数组的第一个元素
    b[1];//访问数组的第二个元素
    c[5];//访问数组的第三个元素

对于以上的形式,我们还有几个必须注意的点

我们先通过int a[5]来进行定义一个数组之后通常要注意以下两点

注:

  1. a[0];访问第一个元素的下标但是0,而不是1

  2. a[5] ; 会报错,因为访问第五个元素的下标是4

3.循环和数组的关系

首先我们根据一个问题来进行分析循环和数组的关系

我们在通常实行一个执行10次的循环,我们通常是这么写;

for (i=0;i<10;i++)
{
...
}

而不是这样写

for (i=;i<=10;i++)
{
...
}

这是为什么呢?

这就素因为循环和数组是由有关系的!

因为我们常常需要使用循环来进行访问数组。

比如以下的代码

int a[10]for(i=0;i<10;i=i+1) 
   {
       a[i]= i;
   }

我们以下通过一个例子来理解吧!

请尝试用数组存放班里10位同学的数学成绩,并计算出平均值

对于以上这个问题,我们应该如何用代码来进行实现呢?
请看以下的代码

#include <stdio.h>
#define NUM 10
int main()
{
    int a, sum = 0;
    int arr [NUM];
    for (a = 0; a < 10; a = a + 1)
    {
        printf("请输入第%d位同学的成绩: ", a + 1);//可以输入%d或者%i
        scanf("%d", &arr[a]);
        sum = sum + arr[a];//也可以输入sum+=arr[a]//+=(例如:a+=b等价于a=a+b)
    }
    printf("成绩录入完毕,这次考试的平均成绩为:%.2f\n", (double)sum / NUM);
        return 0;
}

对于%d和%i请参考文章(15条消息) %d %i的区别(你想知道的C语言 2.3)_一丝晨光的博客-CSDN博客_c语言%i是什么

但是就上请注意一个关键:%d和%i在printf里面输入无差别,而在scanf里面则可以用八进制以及十六进制数来进行输入

以上的输出结果如下图所示,我们进行随便写几个成绩。

image-20221130132622790

4.数组的初始化

①定义

当我们在给一个数组定义的同时在给它进行赋值,我们称它为数组的初始化。

以下将举出几个例子来进行理解下数组的初始化

1.将数组的所有元素初始化为0,我们可以这样写。

int a[10] = {0};//事实上仅仅只是将第一个元素赋值为0

2.如果是赋予不同的值,那么用逗号进行隔开即可。

int a[10] = {1,2,3,4,5,6,7,8,9,0};

3.还可以只给其中一部分元素进行赋值,其他赋值的元素自动初始化为0;

int a[10] = {1,2,3,4,5,6};//表示前面6给元素被赋值,后面四个元素初始化为0

对于上面的三个例子我们分别用代码进行实现

#include <stdio.h>
int main()
{
int i;
int a[10] = {...};//此处可以根据上面进行替换。
for(i=0;i<10;i=i+1)//利用for循环将数组内的每一个元素都打印出来
{
printf("%d\n",a[i]);
}
return 0 ;
}

以下分别对应1.2.3的输出结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-krATkNtX-1669872137767)(https://luoxi2334.oss-cn-shanghai.aliyuncs.com/luoxi-picture/image-20221130132952333.png)]

image-20221130133013906

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GGiHQnnr-1669872137767)(https://luoxi2334.oss-cn-shanghai.aliyuncs.com/luoxi-picture/image-20221130133035815.png)]

②其他形式

1.其实有时候对于以上的几个形式中,在定义数组后面的[]可以偷懒不写,比如写成以下形式。

int a[] = {1,2,3,4,5,6,7,8,9,0}

我们可以看到以上的形式中,{}内有10个元素,[]内并未写出数组内元素的数量。

因为编译器会根据值的个数自动判断数组的长度

2.其次C99还增加了一个新的特性可以给数组的指定的元素进行赋值,而未被赋值的元素自动初始化为0。比如以下的例子。

int a[5] = {[0]=1,[1]=1,[2]=4,[3]=5,[4]=1,[5]=4};

对于以上这种情况在vscode以及vs2019都将会报错,报错内容为下。

VSCODE

image-20221130191329783****

VS2019

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kI62x7K9-1669872137767)(https://luoxi2334.oss-cn-shanghai.aliyuncs.com/luoxi-picture/image-20221130191538588.png)]

由此可见,在c语言中,数组内的元素并不能全部进行赋值,只能小于数组的总元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值