C语言 二维数组定义和使用 - C语言零基础入门教程

本文介绍了C/C++中二维数组的基础概念,包括数组定义、初始化方法,以及如何访问和修改二维数组的元素,同时强调了下标管理和边界检查的重要性。
摘要由CSDN通过智能技术生成

目录

  • [一.二维数组简介]
  • [二.定义二维数组并初始化]
    • [1.定义二维数组]
    • [2.初始化二维数组]
  • [三.访问二维数组]
  • [四.修改二维数组]
  • [五.猜你喜欢]

零基础 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}};

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

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

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,就是字符 '\0';
对于float、double,就是小数0.0。

三.访问二维数组

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

/******************************************************************************************/

#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("\n");
    }
    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
*/

四.修改二维数组

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

/******************************************************************************************/

#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("\n");
    }
    printf("-------------------------------------------\n");
    //修改数组的值
    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("\n");
    }
    //查询修改后数组的值
    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("\n");
    }
    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
*/
  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

龙年行大运

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

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

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

打赏作者

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

抵扣说明:

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

余额充值