C/C++之二维数组

C/C++之二维数组

上节我们分析了内联函数和递归函数的使用。C/C++之内联函数与递归函数

本节我们介绍二维数组。

  • 二维数组和一维数组不同,一维数组可以比作一条直线,而二维数组就是一个平面。
    例子:阅兵时候的方阵,有行和列。与二维数组很类似,也有行列!也和数学中的矩阵很相似!

  • 二维数组的定义: 只需要多加一个[]运算符即可!
    一维数组: int a[10];
    二维数组: int a[10][10];

  • 二维数组的初始化
    定义了不初始化,二维数组里面的值是随机的

    • 第一种:
      int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
      也可以这样写:
      int a[3][4] = {
      {1, 2, 3, 4},
      {5, 6, 7, 8},
      {9, 10, 11, 12}
      };

    • 第二种:
      int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

    • 第三种:支持全局初始化: 例如int a[3][4] = {0};

    • 第四种:初始化部分元素:int a[3][4] = {{1, 2}, {5, 6, 7}, {9, 10, 11, 12}};未初始化的元素充0

    • 补充,使用第一种或者第四种的时候,第一个[]内可以不用写大小。例如:int a[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};编译器自动获取多少行。

  • 二维数组的访问: 访问第i行第j列的元素使用a[i - 1][j - 1];
    注意: 和一维数组一样,行标和列标都从0开始
    例子:遍历数组

    #include <iostream>
    
    using namespace std;
    
    int main(){
    	int a[3][4] = {
            {1, 2, 3, 4},
            {5, 6, 7, 8},
            {9, 10, 11, 12}
        };
        
        for(int i = 0; i < 3; i++){
    		for(int j = 0; j < 4; j++){
                cout << a[i][j] << "\t";
            }
            cout << endl;
        }
        
        return 0;
    }
    

    输出结果:

    1	2	3	4
    5	6	7	8
    9	10	11	12
    

    具体的数组如下图:
    a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

    a[0][0]
    1
    a[0][1]
    2
    a[0][2]
    3
    a[0][3]
    4
    a[1][0]
    4
    a[1][1]
    5
    a[1][2]
    6
    a[1][3]
    7
    a[2][0]
    9
    a[2][1]
    10
    a[2][2]
    11
    a[2][3]
    12
  • 注意: 不能越界访问!!!例如a[3][4]是没有元素 a[m][4]或者a[3][n]的,会报错!

  • 使用循环对二维数组赋值:

    • 最简单的方法两重循环(最好理解)

      #include <iostream>
      
      using namespace std;
      
      int main(){
        int a[3][4];
      
          //给二维数组赋值1 ~ 12
          //最简单
          for(int i = 0; i < 3; i++){
            for(int j = 0; j < 4; j++){
                  a[i][j] = i * 4 + j + 1;
              }
          }
      
          for(int i = 0; i < 3; i++){
            for(int j = 0; j < 4; j++){
                  cout << a[i][j] << "\t";
              }
              cout << endl;
          }
      
          return 0;
      }
      

      输出结果:

      1	2	3	4
      5	6	7	8
      9	10	11	12
      
    • 使用一重循环的方式

      #include <iostream>
      
      using namespace std;
      
      int main(){
        int a[3][4];
      
          //给二维数组赋值1 ~ 12
         	for(int i = 0; i < 12; i++){
              a[i / 4][i % 4] = i + 1;
          }
          
          for(int i = 0; i < 3; i++){
            for(int j = 0; j < 4; j++){
                  cout << a[i][j] << "\t";
              }
              cout << endl;
          }
      
          return 0;
      }
      

      输出结果:

      1	2	3	4
      5	6	7	8
      9	10	11	12
      
  • 补充: 二维数组定义为全局变量会自动赋值为0;

  • 储存方式:
    一维数组是按照顺序在内存中存储的,二维数组同样也是。
    例如:a[3][4]在内存中,先按顺序存第一行的四个元素,再存第二行的元素,以此类推。与a[12]类似
    在这里插入图片描述

  • 在vs中调试可以看到对应的地址与数据。以上面的代码为例子:
    在这里插入图片描述

    很直观的看到数组的地址和值a[0]、a[1]、a[2]每个地址差0x10(16进制)十进制差16。(注意:a[3][4]的起始地址和a[0][0]相同)
    结论:数组在内存中是连续的。
    更加直观的方式:
    在这里插入图片描述

    连续!!!! 每一个数相差4字节(一个int)

  • 补充:更高维数组,很少使用多维数组。
    例如:int a[2][3][4]表示有2个a[3][4]数组。与二维数组差不多,只是维度高一维而已。
    此处初始化a[2][3][4] = {
    {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
    {{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}
    }

  • 二维数组做函数的参数:
    与一维数组一样,不是单纯的值传递,而是传递的数组本身。详细的介绍在之前已经做过解释了。C/C++之自定义函数

    #include <iostream>
    
    using namespace std;
    
    //定义scorePrint打印score中的成员。
    void scorePrint(int score[][5]){ //数组形参本质上是指针。等价于int* score;
        cout << sizeof(score) << endl;
    }
    
    int main(){
        //两个班的同学成绩。
    	int score[2][5] = {59, 60, 79, 89, 99};
    	//打印数组大小4 * 5
    	cout << sizeof(score) << endl;
      
     	corePrint(score);
      
    	return 0;
    }
    

    输出结果:

    40
    4
    

    说明: 传递到函数中的数组实际上是一个指针(int*)只有4字节大小,通过指针来访问数组中的值。

本节介绍了二维数组的内容。下节讲指针!!!!!重点!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要创建一个二维vector数组c,你可以使用以下方法: 1. 使用vector的构造函数初始化二维数组c,并指定初始值为0。例如,使用以下代码可以创建一个行数为row,列数为column的二维数组,并将所有元素初始化为0: vector<vector<int>> c(row, vector<int>(column, 0)); 2. 使用push_back()函数逐行添加向量。例如,使用以下代码可以创建一个空的二维数组c,并逐行添加向量: vector<vector<int>> c; vector<int> row1; row1.push_back(0); row1.push_back(1); row1.push_back(2); c.push_back(row1); vector<int> row2; row2.push_back(3); row2.push_back(4); row2.push_back(5); c.push_back(row2); 3. 使用索引方式直接操作二维数组。例如,使用以下代码可以创建一个空的二维数组c,并直接通过索引方式添加元素: vector<vector<int>> c; c.push_back(0); c.push_back(1); c.push_back(2); c.push_back(3); c.push_back(4); c.push_back(5); 请注意,在使用索引方式操作二维数组时,确保已经为每一行创建了向量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [c++---vector二维数组](https://blog.csdn.net/m0_50046535/article/details/125344884)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [C++--vector数组使用](https://blog.csdn.net/JUST__Tw/article/details/112221317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值