• C语言——数组


    一,数组的概念和特点

    数组是存放两个或两个以上相邻储存单元集合,每个储存单元中存放相同数据类型的数据,而这样的单元也被称为数组元素

    我们将这句话进行拆分,不难发现数组的特点有:

    1,数组是存放多个数据的集合,元素的个数不能为0

    2,数组元素的存放是相邻的

    3,数组中的数据的类型是相同

    二,一维数组

    (1)了解一维数组

    a,创建

    格式:

    type arr_name [常量值];

    说明:

    type 是指要存放在数组里的数据的类型(可以是:char、int···   也可以是自定义类型)

    arr_name 是数组的名字,数组取名根据实际需求,有意义即可

    [] 中的常量值是用来指定数组大小的,根据实际的需求指定

    数组的声明语句及含义,如:

    int a [10];                     指:定义一个长度为10的 int 数组 a

    double score [50];       指:定义一个长度为50的double数组score

    int b [10],x [27];           指:定义了一个长度为10的 int 数组b 和一个长度为27的 int 数组x

    b,初始化

    数组的初始化就是给数组赋初始值,将数据放在 {} 

    完全初始化(初始化数据的数量 = 数组长度):

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

    不完全初始化(初始化数据的数量  < 数组长度):

    int arr [5] = {1,2}    //此时,第一个元素初始化为1,第二个为2,剩余的元素默认初始化为0

    错误初始化(初始化数据的数量  > 数组长度):

    int arr [3] = {1,2,3,4}    //初始化项太多,错误

     注意:int arr []  ={1,2,3}    等效于→   int arr [3] ={1,2,3}

     数组如果初始化了,可以不规定大小,数组会根据初始化的大小来确定大小

    c,数组的类型

    数组里的元素有分类型,数组也是有类型的,而数组算是一种自定义类型。数组的类型就是去掉数组名后,剩下的部分(一维数组一般为:元素类型+长度),如:

    int arr1 [10];                         数组arr1的类型是:int [10]

    double score [50];             数组score的类型是:double [50]

     (2)使用一维数组

    使用过程:数组可以用来存放数据,存放后,可以通过数组的下标找到对应的数据

    a,数组下标

    C语言中,数组的下标是从0开始的,如果有n个元素,则第一个元素的下标为0,最后一个元素的下标为n-1 ,下面举例:

    对于:            int arr [5] = {1,2,3,4,5};

    数组元素:           1          2          3                   5 

    对应下标:           0          1          2          3          

     C语言中 [ ] 是“下标引用操作符” ,比如:arr [5]; 就是访问下标为5的元素;arr [0];就是访问下标为0的元素(即第一个元素)

    b,输入与打印

    当我们需要依次给数组输入数据时我们可以利用for循环scanf函数,如:

    输入:

    ······(前面部分省略)

    int arr [10] = {0};

    int i = 0;

    for (i = 0; i < 10;i++)   //注意 i 不能等于10,若等于10则有0-10共11个数,会造成数组越界

    {

           scanf ("%d",&arr [i]);    //通过循环i值的改变,不断把数据存入数组 

    }

     输出同理:

    ······

    for(i = 0;i < 10;i++)

    {

             printf("%d",arr[i]);

    }

     c,储存

    这里主要讲下数组的元素在内存中储存的特点:

    我们先用一下代码来依次打印出一维数组里元素的地址:

    得到:

    由上述打印出的地址,我们可以得出,数组在内存储存的特点是:

    1,数组随下标的增长,地址由小变大

    2,并且每两个相邻的元素之间相差4(即一个整形的大小:4个字节)

    三,二维数组

    (1)了解二维数组

    如果我们把一维数组当做数组的元素,那么此时创造的就是二维数组;把二维数组当元素,那创造的就是三维数组,依次类推,二维数组以上的统称为多维数组。

    a,创建

    type arr_name [常量值] [常量值];  //第一个[ ] 里的代表“”,第二个 [ ]里的代表“

    如:

    int arr [3] [5];                 表示:定义一个3行5列的 int 数组arr

    double data [2] [8];        表示:定义一个2行8列的 double 数组data

    //与定义一维数组不同的是,一维数组是指定长度,二维是指定行数和列数

    //定义时:[行数]可以省略,[列数]不可以省略  即:可以是int arr [] [5]的形式

    b,初始化

    同样是用{}将数据括起来,初始化的规则是:先放完一行,再放下一行

    不完全初始化:

    int arr1 [3] [5] = {1,2};   //剩余元素默认初始化为0

    完全初始化:

    int arr3 [3] [5] ={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

    按行初始化:

    int arr4 [3] [5] = {{1,2},{3,4},{5,6}}       //其实就是把一行当一个元素(即一维数组)

    (2)使用二维数组

     a,数组下标

    二维数组的行和列下标也是从0开始的,都有第0行,第0列

    对于:     int arr3 [3] [5] ={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

    比如我们使用arr[2] [4] 就代表第2行,第4列,我们就能快速的找到7

    b,输入与打印

    我们可以利用for的嵌套,先产生第一行,然后再遍历行,再产生第二行,再遍历,以此类推

    输入:

    ······(省略)

    int arr [3] [5] ={0};

    int i = 0;

    for(i = 0; i < 3; i++)    //产生行,嵌套内for循环来产生列,来遍历行

    {

            int j = 0;

            for(j = 0; j < 5 ;j++)

               {

                      scanf("%d",&arr[i][j]);  //输入数据

                }

    }

    c,储存

    用同样的打印方法,我们来观察二维地址的特点:

    不难发现,和一维数组所得出的结论应该一致:

    1,数组随下标的增长,地址由小变大

    2,并且每两个相邻的元素之间相差4(即一个整形的大小:4个字节)

    四,C99中的变长数组

    一般来说,数组的大小指定只能使用常量常量表达式,或直接初始化而省略大小

    int arr1[10];

    int arr2[3+5];

    int arr3[] = {1,2,3};         //初始化完后,数组的长度就规定好是3了

    但是C99给了一个变长数组,让我们能使用变量指定数组大小,如:

    int n = a + b;

    int arr [n];

    上面的arr就是变长数组,它的长度由n决定,编译器无法事先知道,只有当运行时,才能知道arr的长度,好处就是我们可以根据自己所需比较精准,方便的给数组分配长度。(但是在vs中是不支持变长数组的


    🌈我的分享就到此结束啦🌈
    要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
    若有不足,还请大家多多指正,我们一起学习交流!

    如果你也感受到博主的良苦用心,请允许博主在这里讨个三连 o(╥﹏╥)o

    最后,祝愿大家都能开开心心,过好每一天!!!

  • 相关阅读:
    C++之保存编译全部中间文件(二百一十五)
    springboot实现主从数据库动态切换(注解式)
    成熟的汽车衡称重软件,应具备哪些品质
    软件测试人在深圳有哪些值得去的互联网公司【软件测试人员专供版】
    云呐|如何利用系统管理固定资产?如何进行固定资产管理?
    国庆作业day1
    Remote Desktop Service (RDS) 远程桌面服务漏洞简介 BlueKeep DejaBlue
    02-Flask-对象初始化参数
    LS1046A平台 网卡混杂模式,无法收到DMAC不是自己的包
    手动搭建K8S环境
  • 原文地址:https://blog.csdn.net/tan_run/article/details/134275791