C语言成长之路42:二维数组

声明:本笔记基于 B站UP主「来自程序员的暴击」的 「C语言成长之路」中对应课程;


 1、二维数组的概念

  一维数组通常成为向量,二维数组,最简单的理解是“有两个下标”,如果把一维数组理解为一行数据,那么,二维数组可以形象的表示行列结构,如:excel的表格

 

2、二维数组的格式:

    数据类型 变量名[行个数][列个数] = {{一维数组},{一维数组},......};
    int a[2][3] = {{1,2,3},{4,5,6}};

 

3、查看遍历二维输出,打印出里面每一个元素的值以及其内存地址

#include <stdio.h>

int main(){
    /*  C语言成长之路42:二维数组
     *
     */int a[2][3] = {{1,2,3},{4,5,6}};
    printf("&a = %p,sizeof(a) = %d\n",a,sizeof(a));
    for (int i = 0;i < 2;i++){
        for (int x = 0;x < 3; x++){
            printf("a[%d][%d] = %d,%p\n",i,x,a[i][x],&a[i][x]);
        }
    }
}

打印结果如下:

&a = 005EFE50,sizeof(a) = 24
a[0][0] = 1,005EFE50
a[0][1] = 2,005EFE54
a[0][2] = 3,005EFE58
a[1][0] = 4,005EFE5C
a[1][1] = 5,005EFE60
a[1][2] = 6,005EFE64

可以看书,数组里的每个元素也是连续排列的;

 

重点:二维数组的赋值方法:

    int x[3][5] = {0};
    for (int i = 0;i < 15;i++){
        x[i / 5][i % 5] = i;
    }

完成后遍历一下,结果如下:

x[0][0] = 0,0073FA58
x[0][1] = 1,0073FA5C
x[0][2] = 2,0073FA60
x[0][3] = 3,0073FA64
x[0][4] = 4,0073FA68
x[1][0] = 5,0073FA6C
x[1][1] = 6,0073FA70
x[1][2] = 7,0073FA74
x[1][3] = 8,0073FA78
x[1][4] = 9,0073FA7C
x[2][0] = 10,0073FA80
x[2][1] = 11,0073FA84
x[2][2] = 12,0073FA88
x[2][3] = 13,0073FA8C
x[2][4] = 14,0073FA90

 过程思考:

第一次循环:i = 0  --> i / 5 = 0;i % 5 = 0 -->x[0][0] = 0;

第二次循环:i = 1 --> i / 5 = 0;i % 5 = 1(1 / 5 = 0...1) -->x[0][1] = 1;

第三次循环:i = 2 --> i / 5 = 0;i % 5 = 2(2 / 5 = 0...2) -->x[0][2] = 2;

………………

第十五次循环:i = 14 --> i / 5 = 2;i % 5 = 4(14 / 5 = 2...4) -->x[2][4] = 14;


 

练习思考:

int bb[i][j] = i * 5 + j + 1

代码:

#include <stdio.h>

int main(){
    /*  C语言成长之路42:二维数组
     *
     */
    //  练习理解
    //  int bb[i][j] = i * 5 + j + 1
    int bb[3][5] = {0};
    for (int i = 0;i < 3;i++){
        for (int j = 0;j < 5;j++){
            bb[i][j] = i * 5 + j + 1;
        }
    }
    for (int i = 0;i < 3;i++){
        for (int j = 0;j < 5;j++){
            printf("bb[%d][%d] = %d,%p\n",i,j,bb[i][j],&bb[i][j]);
        }
    }
}

结果如下:

bb[0][0] = 1,00F3F958
bb[0][1] = 2,00F3F95C
bb[0][2] = 3,00F3F960
bb[0][3] = 4,00F3F964
bb[0][4] = 5,00F3F968
bb[1][0] = 6,00F3F96C
bb[1][1] = 7,00F3F970
bb[1][2] = 8,00F3F974
bb[1][3] = 9,00F3F978
bb[1][4] = 10,00F3F97C
bb[2][0] = 11,00F3F980
bb[2][1] = 12,00F3F984
bb[2][2] = 13,00F3F988
bb[2][3] = 14,00F3F98C
bb[2][4] = 15,00F3F990

过程思考:

由于是双层for循环结构,再进入第二个for的时候,会循环到条件不满足位置,才跳出循环,所以第一蹭循环的时候,i的值一直为0,即bb[0][j] = {};的情况,然后在j循环这一层循环了5次,j的值分别为0,1,2,3,4,第一次完整循环会产生:

bb[0][0],bb[0][1],bb[0][2],bb[0][3],bb[0][4]

而对应的值分别为:

0 * 5 + 0 + 1 = 1    ---->bb[0][0] = 1;

0 * 5 + 1 + 1 = 1    ---->bb[0][1] = 2;

0 * 5 + 2 + 1 = 1    ---->bb[0][2] = 3;

0 * 5 + 3 + 1 = 1    ---->bb[0][3] = 4;

0 * 5 + 4 + 1 = 1    ---->bb[0][4] = 5;

如此类推,就能按照特定的方式给二维数组赋值了;

 

posted @ 2020-08-06 13:46  Akne  阅读(143)  评论(0编辑  收藏  举报