zoukankan      html  css  js  c++  java
  • C语言基础--二维数组

    二维数组概念:

      数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组。

    二维数组格式:

      元素类型 数组名称[一维数组的个数][每个一维数组的元素个数];

          元素类型 数组名称[行数][列数];    

            元素类型:              说明二维数组中每个一维数组存储什么类型的数据

            一维数组的个数:         说明二维数组有多少个元素

            每个一维数组的元素个数 :  说明二维数组中每一个一维数组的元素个数

    二维数组的定义:

     //可以看作由一维数组names[0]和一维数组names[1]组成,这两个一维数组都包含了3个char类型的元素
     char names[2][3] =
        {
          // 0    1    2
            {'l', 'n', 'j'}, // 0
            {'l', 'm', 'j'} // 1
        }; 

    二维数组的初始化:

    // 1.定义的同时初始化
        int names[2][3] =
        {
            {'l', 'n', 'j'},
            {'l', 'm', 'j'}
        };
    
        // 2.先定义再初始化
        int names2[2][3];
        names2[0][0] = 'l';
        names2[0][1] = 'n';
        names2[0][2] = 'j';    
    
        names2[1][0] = 'l';
        names2[1][1] = 'm';
        names2[1][2] = 'j';    
    
        // 3.完全初始化
        int names3[2][3] =
        {
            {'l', 'n', 'j'},
            {'l', 'm', 'j'}
        };    
    
        // 4.不完全初始化
        int names4[2][3] =
        {
            {'l', 'n'},
        };    
    
        // 5.省略元素个数的两种写法
        // 明确的告诉二维数组, 我们有2个一维数组
        char names5[2][3] =
        {
            'l', 'n', 'j',
            'l', 'm', 'j'
        };
        char names15[2][3] =
        {
            'l', 'n', 'j',
            'n', 'b'
        };    
    
        // 没有告诉二维数组我们有几个一维数组
        // 如果在"定义的同时"进行初始化, 那么一位数组的个数可以省略 
        //系统会自动根据每一个一维数组能够存放多少个元素, 自动根据初始化的值推断出二维数组中一共有多少个元素(多少个一维数组)
        char names6[][3] =
        {
            'l', 'n', 'j',
            'l', 'm', 'j',
            'n', 'b'
        };    
    
        // 6.错误写法
        // 注意点: 每个一维数组的元素个数不能省略
        int names7[2][] =
        {
            {'l', 'n', 'j'},
            {'l', 'm', 'j'}
        };    
    
        // 搞不清楚应该分配多大的存储空间, 以及搞不清楚应该把哪些数据赋值给第一个数组, 哪些数据赋值给第二个数组
        int names7[2][] =
        {
            'l', 'n', 'j',
            'l', 'm', 'j'
        }; 

    访问元素:

    // 获取二维数组中的一维数组的元素的值
     printf("%c
    ", names[0][0]); 

    遍历:  

        // 如何遍历二维数组
         // 思路: 1.取出二维数组的每一个元素(取出二维数组中的一维数组)
         //       2.遍历一维数组
         for (int i = 0; i < 2; i++) { // 0 , 1
             // 1.取出一维数组
             //names[i];
             for (int j = 0; j < 3; j++) { // 0 , 1 , 2
                 printf("name[%i][%i] = %c
    ", i, j, names[i][j]);
             }
         } 

    存储方式:

      1)计算机会给二维数组分配一块连续的存储空间

      2)数组名代表数组的首地址,从首地址位置,依次存入第1行、第2行、.....

      3)每一行存储方式,从行首地址还是,依次存储行的第1个元素、第2个元素、第3个元素......

      4)每个元素占用相同的字节数(取决于数组类型)

      5)并且数组中元素之间的地址是连续。

       

     二维数组与函数:

    #include <stdio.h>
    void change2(char names[2][3]);
    void change3(char values[]);
    void change4(char value); 
    
    int main(int argc, const char * argv[]) {
       char names[2][3] =
        {
            {'l', 'n', 'j'},
            {'l', 'm', 'j'}
        };
        // &names == names == &names[0] , names就是数组的地址
        printf("&names = %p
    ", &names);
        printf("names = %p
    ", names);
        printf("&names[0] = %p
    ", &names[0]);    
    
        // 二维数组名称作为函数参数传递, 是传递的地址   
        change2(names);
        // names[0] == 一维数组
        change3(names[0]);
        // names[0][0] == 一维数组的一个元素 == 值
        change4(names[0][0]);   
    
        printf("names[0][0] = %c
    ", names[0][0]);
        return 0;
    }
    // 接收基本数据类型
    void change4(char value)
    {
        value = 'E';
         printf("我执行了
    ");
    }
    // 以后只要看到函数的参数是一个数组, 那么就是地址传递  在函数中修改形参的值会影响到参数
    //接收一维数组
    void change3(char values[])
    {
        values[0] = 'Q';
         printf("我执行了
    ");
    }
    //接收二维数组  行数和列数不能省略
    void change2(char values[2][3])
    {
        values[0][1] = 'w';
        printf("我执行了
    ");
    }
  • 相关阅读:
    Keras如何构造简单的CNN网络
    到底该如何入门Keras、Theano呢?(浅谈)
    PyCharm使用技巧记录(一)如何查看变量
    使用 环境变量 来配置批量配置apache
    QT静态链接
    NTP服务器
    debian添加sudo
    龙芯8089_D安装debian 8 iessie
    verilog 双向IO实现
    FPGA入门学习第一课:二分频器
  • 原文地址:https://www.cnblogs.com/dx-230/p/4756351.html
Copyright © 2011-2022 走看看