zoukankan      html  css  js  c++  java
  • C语言 二维数组定义和使用

    目录

    零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

    一.二维数组简介

    C 语言中,一组数据的集合称为数组 Array ,也称为一维数组,比如:字符串 char ,实际上也算是数组,字符串由多个字符构成;

    而二维数组和一维数组类似,简单理解就是:二维数组由多个一维数组构成,语法如下:

    type arrayName [ x ][ y ];
    //x的取值范围:0 <= index < x   下标重0开始,最大值为x-1,否则会产生下标越界
    //y的取值范围:0 <= index < y   下标重0开始,最大值为y-1,否则会产生下标越界
    

    因此,数组中的每个元素是使用形式为 a[ i , j ] 的元素名称来标识的,其中 a 是数组名称,i 和 j 是唯一标识 a 中每个元素的下标。

    二维数组中的每一个数据叫做数组元素 Element ,二维数组中的每个元素都有一个序号,这个序号由 xy 组成(即横向坐标和纵向坐标),都是从 0 开始,例如,a[0][6] 表示第1行第7个元素,a[3][1] 表示第 4 行第2个元素;

    举个例子:定义一个这样的二维数组

    int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vho32HiP-1629616389974)(https://www.codersrc.com/wp-content/uploads/2021/06/e4da3b7fbbce234.png “C 语言 二维数组定义和使用-猿说编程”)]

    二维数组本质就是一个一维数组。如果把二维数组的每一行看成一个整体,即看成一个数组中的一个元素,那么整个二维数组就是一个一维数组

    二.定义二维数组并初始化

    1.定义二维数组

    要想把数据放入内存,必须先要分配内存空间。例如:放入4个一维数组,8个整数,即 4 行 8 列:

    //整形数组
    int a[4][8];//由4个一维数组构成,索引值0~3;每个一维数组中有8个整形变量,索引值0~7;
    //浮点数数组
    float a[4][8];//由4个一维数组构成,索引值0~3;每个一维数组中有8个浮点数变量,索引值0~7;
    //浮点数数组
    double a[4][8];//由4个一维数组构成,索引值0~3;每个一维数组中有8个浮点数变量,索引值0~7;
    //字符串
    char a[4][8];//由4个一维数组构成,索引值0~3;每个一维数组中有8个字符变量,索引值0~7;
    

    2.初始化二维数组

    A.在定义二维数组的同时赋值

    多维数组可以通过在括号内为每行指定值来进行初始化。下面是一个带有 3 行 4 列的数组。

    int a[3][4] = {
                    {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
                    {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
                    {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
    };
    

    内部嵌套的括号是可选的,下面的初始化与上面是等同的:

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

    B.根据二维数组下标对数组元素赋值

    在通过下标修改二维数组的值时,需要注意 数组下标越界 的问题;

    a[4][2];  //定义一个二维数组
    a[0][0]=10;
    a[0][1]=20;
    a[1][0]=30;
    a[1][1]=40;
    a[2][0]=50;
    a[2][1]=60;
    a[3][0]=70;
    a[3][1]=80;
    //a[0][3]=20; //错误写法,下标越界
    //a[0][2]=20; //错误写法,下标越界
    //a[4][2]=20; //错误写法,下标越界
    等价:
    a[4][2]= {10,20,30,40,50,60,70,80}
    等价:
    a[4][2] = {
                    {10,20},
                    {30,40},
                    {50,60},
                    {70,80}
    }
    

    C.只给部分元素赋初值,当{ }中值的个数少于元素个数时,只给前面部分元素赋值,后面的元素默认为0

    //案例一
    int a[3][4] = {{1},{2},{3}};
    等价:
    int a[3][4] = {{1,0,0,0},{2,0,0,0},{3,0,0,0}};
    //案例二
    int a[3][4] = {{1}};
    等价:
    int a[3][4] = {{1,0,0,0},{0,0,0,0},{0,0,0,0}};
    

    当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0

    对于short、int、long,就是整数0;
    对于char,就是字符 '';
    对于float、double,就是小数0.0。
    

    三.访问二维数组

    数组中的每个元素都有一个序号,这个序号从 0 开始,称为下标 index ,例如,a[0][2] 表示第 1 行第 3 个元素,a[3][5] 表示第 4 行第 6 个元素。所以我们可以直接通过下标访问数组中元素的值,例如:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 二维数组定义和使用
    //@Time:2021/06/12 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include <stdio.h>
    int main(void) {
        int a[3][4] = {{1,2,3,4},{2,4,6,8},{3,6,9,0}};
        for (int i = 0 ;i<3;i++) {
            for(int j = 0;j<4;j++)
                printf("a[%d][%d] = %d  ",i,j,a[i][j]);//根据下标查询
            //换行
            printf("
    ");
        }
        return 0;
    }
    /*
    输出:
    a[0][0] = 1  a[0][1] = 2  a[0][2] = 3  a[0][3] = 4
    a[1][0] = 2  a[1][1] = 4  a[1][2] = 6  a[1][3] = 8
    a[2][0] = 3  a[2][1] = 6  a[2][2] = 9  a[2][3] = 0
    */
    

    四.修改二维数组

    我们既然可以通过数组下标访问数组的值,那么同样也可以使用下标修改数组的值,例如:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 二维数组定义和使用
    //@Time:2021/06/12 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include <stdio.h>
    int main(void) {
        int a[3][4] = {{1,2,3,4},{2,4,6,8},{3,6,9,0}};
        for (int i = 0 ;i<3;i++) {
            for(int j = 0;j<4;j++)
                printf("a[%d][%d] = %d  ",i,j,a[i][j]);//根据下标查询
            //换行
            printf("
    ");
        }
        printf("-------------------------------------------
    ");
        //修改数组的值
        for (int i = 0 ;i<3;i++) {
            for(int j = 0;j<4;j++)
                a[i][j] *= 10 ;//等价 a[i][j] = a[i][j] * 10
            //换行
            printf("
    ");
        }
        //查询修改后数组的值
        for (int i = 0 ;i<3;i++) {
            for(int j = 0;j<4;j++)
                printf("a[%d][%d] = %d  ",i,j,a[i][j]);//根据下标查询
            //换行
            printf("
    ");
        }
        return 0;
    }
    /*
    输出:
    a[0][0] = 1  a[0][1] = 2  a[0][2] = 3  a[0][3] = 4
    a[1][0] = 2  a[1][1] = 4  a[1][2] = 6  a[1][3] = 8
    a[2][0] = 3  a[2][1] = 6  a[2][2] = 9  a[2][3] = 0
    -------------------------------------------
    a[0][0] = 10  a[0][1] = 20  a[0][2] = 30  a[0][3] = 40
    a[1][0] = 20  a[1][1] = 40  a[1][2] = 60  a[1][3] = 80
    a[2][0] = 30  a[2][1] = 60  a[2][2] = 90  a[2][3] = 0
    */
    

    五.猜你喜欢

    1. 安装 Visual Studio
    2. 安装 Visual Studio 插件 Visual Assist
    3. Visual Studio 2008 卸载
    4. Visual Studio 2003/2015 卸载
    5. C 语言格式控制符/占位符
    6. C 语言逻辑运算符
    7. C 语言三目运算符
    8. C 语言逗号表达式
    9. C 语言 sizeof 和 strlen 函数区别
    10. C 语言 strcpy 和 strcpy_s 函数区别
    11. C 语言 memcpy 和 memcpy_s 区别
    12. C 语言 数组定义和使用
    13. C 语言 数组遍历
    14. C 语言 数组排序 – 冒泡法排序
    15. C 语言 数组排序 – 选择法排序
    16. C 语言 数组排序 – 插入法排序
    17. C 语言 数组排序 – 快速法排序
    18. C 语言 数组下标越界
    19. C 语言 数组内存溢出
    20. C 语言 数组下标越界和内存溢出区别
    21. C 语言 二维数组定义和使用

    未经允许不得转载:猿说编程 » C 语言 二维数组定义和使用

    本文由博客 - 猿说编程 猿说编程 发布!

  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/shuopython/p/15174626.html
Copyright © 2011-2022 走看看