zoukankan      html  css  js  c++  java
  • 【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 *

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

  • 相关阅读:
    轻松构建微服务之分布式事物
    Java和操作系统交互细节
    网络内核之TCP是如何发送和接收消息的
    最全的微服务知识科普
    【译】TCP Implementation in Linux
    轻松构建微服务之分库分表
    OSX的一些基本知识
    Delphi中使用比较少的一些语法
    热烈祝贺我的博客开通
    Windows 服务快捷启动命令
  • 原文地址:https://www.cnblogs.com/yexiaopeng/p/15440992.html
Copyright © 2011-2022 走看看