二维数组的学习

前言

在前面我们学习了一维数组,但是有的问题需要用二位数组来解决。

二维数组常称为矩阵,把二维数组写成行和列的排列形式,可以有助于形象化的理解二维数组的逻辑结构。

一、二维数组的定义

二维数组定义的一般格式:

数据类型 数组名常量表达式1 常量表达式2

例如:int a410

a数组实质上是一个有4行、10列的表格,表格中可储存40个元素。第1行第1列对应a数组的

a00,第n行第m列对应数组元素an-1m-1

在C语言中,二维数组中元素的排列顺序是按行排放的,即在内存中先顺序存放第一行的元素

接着存放第二行的元素......

二、二维数组的引用

二维数组的数组元素引用与一维数组元素引用类似,区别在于二维数组元素的引用必须给出

两个下标。

引用的格式为:

数组名 下标1 下标2

例如:int a35

则表示a是二维数组(相当于一个3*5的表格),共有3*5=15个元素,它们是:

a00 a01 a02 a03 a04

a10 a11 a12 a13 a14

a20 a21 a22 a23 a24

因此可以看成一个矩阵(表格),a23即表示第3行第4列的元素。

三、二维数组的初始化

1.全部赋初值

int a34={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

第1个括号是第1行的数据,第2个括号是第2行的数据,第3个括号是第3行的数据。

int a34={1,2,3,4,5,6,7,8,9,10,11,12};

这写法与上面的表达效果一样,但是还是第一种方法好,界限清除。

2.部分赋初值

int a34={{1},{5},{9}};相当于:

int a34={{1},{0,5},{1,1,9}};相当于:

int a34={{1},{0},{1,1,9}};相当于:

3.特殊赋初值

int a34={1,2,3,4,5,6,7,8,9,10,11,12};

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

这两种定义方式等价,系统会自动通过总个数和第二维的长度算出第一维的长度。

四、二维数组程序例子

将一个二为数组的的行与列的元素互换,存到另一个二维数组中。

cs 复制代码
#include<stdio.h>
int main()
{
    int a[2][3]={{1,2,3},{4,5,6}};
    int b[3][2];
    int i,j;

        printf("array a: \n");

        for(i=0;i<=1;i++)
        {
            for(j=0;j<=2;j++)
            {
            printf("%5d",a[i][j]);
            b[j][i]=a[i][j];
            }
            printf("\n");
        }
        
        printf("array b: \n");

        for(i=0;i<=2;i++)
        {
            for(j=0;j<=1;j++)
            {
            printf("%5d",b[i][j]);
            }
            printf("\n");
        }

    return 0;
}


array a: 
    1    2    3
    4    5    6
array b:
    1    4
    2    5
    3    6
PS C:\csay\cyuyan> 

可以定义两个数组,数组a为3行2列存放指定的六个数,数组b为3行2列,开始时未赋值,只

要a数组中的元素aij存放到b数组中的bji元素就可以了,用嵌套的for循环可完成此任务 。

相关推荐
人邮异步社区1 小时前
怎么把C语言学到精通?
c语言·开发语言
xiaobobo33306 小时前
C语言中宏定义宏名和宏值之间的关系
c语言·宏定义·语义型
a44931536210 小时前
MacBook USB-C不充电故障诊断:从PD握手到主板供电链路
c语言·开发语言·macos·电脑
a44931536211 小时前
iPhone 充电故障的全链路诊断——从 Lightning/USB-C 接口到 Tristar 充电 IC
c语言·macos·ios·电脑·硬件架构·iphone
qq_4480111611 小时前
C语言中的getchar()
c语言·开发语言
天空'之城11 小时前
C 语言工业级通用组件手写 15:累加和校验
c语言·嵌入式开发·工业级组件·累加和校验
碎光拾影1 天前
i.MX6ULL时钟系统配置指南
c语言·arm开发·嵌入式硬件
GeekArch1 天前
第28讲:避坑——AI堆栈分配错误、栈溢出BUG
c语言·人工智能·stm32·mcu·学习·bug
wuyk5551 天前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
无相求码1 天前
C程序的内存到底怎么分的?栈、堆、全局区一张图讲清楚
c语言