• 【005:二维数组问题】


    005:二维数组问题

    在 C/C++ 中,我们将使用两个下标的数组称之为二维数组。相比于一维数组中,下标作为索引的存在,二维数组的下标索引往往带有 的意义。如表示一个四边形的四个二维坐标(x,y)这样的场景,就可以使用二维数组进行存储(使用结构体表示一个点的 x/y 坐标也是可以的)。

    1. 二维数组的初始化

    方式一:指定数据初始化

    int a[3][2] = {0, 1, 2, 3, 4, 5}; // -Wmissing-braces
    int a[3][2] = {{0, 1}, {2, 3}, {4, 5}};
    

    方式二:默认初始化

    int a[3][2] = {0}; // 全为0
    int b[3][2] = {};  // 全为0
    int c[3][2];       // 全为随机数
    

    2. 二维数组的访问

    方式1:下标式

    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    {
        (void)(argc);
        (void)(argv);
    
        int a[3][2] = {{0, 1}, {2, 3}, {4, 5}};
    
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                printf("a[%d][%d]=%d
    ", i, j, a[i][j]);
            }
        }
    
        return 0;
    }
    
    

    方式二: 指针式

    #include <stdio.h>
    
    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    {
        (void)(argc);
        (void)(argv);
    
        int a[3][2] = {{0, 1}, {2, 3}, {4, 5}};
    
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                printf("a[%d][%d]=%d
    ", i, j, *(*(a + i) + j));
            }
        }
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                printf("a[%d][%d]=%d
    ", i, j,*(&a[0][0] + i * 2 + j));
            }
        }
        return 0;
    }
    
    

    3. 指针式访问说明

    对于指针式访问有两种写法,对应于数组地址+1数组名+1 这两种关系。

    对于数组名访问的方式:

    • a+i 类型为 int (*)[2]
    • *(a+i) 类型为 int *
    • (*(a+i)+j) 类型为 int *

    而使用数组地址访问,直接按照线性关系移动即可。

  • 相关阅读:
    测试工程师的职场发展二三谈
    一个测试工程师的成长复盘
    职场新人如何提高工作效率
    20212022:时间戳
    职场焦虑之我对35岁危机的看法
    聊聊对职场生涯的认知及选择
    HDU 1695 GCD
    HDU 1796 How many integers can you find
    hdu 2841 Visible Trees
    HDU 3501 Calculation 2
  • 原文地址:https://www.cnblogs.com/yexiaopeng/p/15440992.html
Copyright © 2020-2023  润新知