zoukankan      html  css  js  c++  java
  • 数组初识

    数组初识

      数组是一个大小固定、能够存储相同类型元素的顺序集合,属于C语言基本语法之一

    一维数组

      数组声明  在C语言中,声明一个数组需要指定元素类型和数组长度

        type array_name[array_size];   --- 合法的数据类型,数组名,数组长度

        举例  使用int 类型

          int arr[10];   ---数据类型为:int类型, 数组名:arr, 数组长度:10

      数组初始化  

        你可以逐个元素进行初始化,也可以统一进行初始化

        1.逐个元素初始化  初始化的元素个数不能超出array_size,一般编译器会进行报错

          int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        2.统一进行初始化  这种方法相较上面具有更加灵活性,假设有几十个数据需要存储,总不能对它们进行一一初始化(个人认为)

          int arr[10] = { 0 };

        3.补充说明:可以对数组进行部分元素赋值初始化

        注意:如果未说明数组的长度,那么数组的长度就为你初始化元素个数的数值,

        未说明数组的长度,必须对数组进行初始化,因为C语言不允许使用不完整的类型,

        且之后进行数组使用的时候必须注意数组越界的情况,数组长度即为初始化的长度,是一个固定值

        **使用数组必须注意数组越界情况

      数组使用(访问数组元素)

        通过数组名+[ 数组元素的下标]进行访问数组元素,至于为什么,了解了指针就明白了

    #include<stdio.h>
    
    int main(){
        // 声明数组
        // 没有进行初始化时,[]内的数组长度必须说明,否则产生error
        // 因为C不允许使用不完整结构的类型
        int arr_0[10];
        // 声明数组同时进行逐个元素初始化
        int arr_1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        // 声明数组同时进行半初始化
        int arr_2[10] = { 0 };
        // 使用数组  -> 使用arr_0进行说明
        for(int i = 0; i < sizeof(arr_0) / sizeof(int); i++){
            arr_0[i] = i;
        }
        // 打印数组元素
        for(int i = 0; i < sizeof(arr_0) / sizeof(int); i++){
            printf("arr_0[%d] = %d
    ", i, arr_0[i]);
        }
        return 0;
    }

    二维数组

      二维数组实质就是一维数组的列表,也就是说二维数组是建立在一维数组基础之上的一维数组,具体构造图下面会有解释(个人理解二维数组的构造图)

      数组声明

        type array_name[row][col]; ---合法的数据类型,数组名,row是行数,col是列数

      数组初始化

        1.分行给二维数组赋初值

          int arr[3][4] = { {1, 2 ,3 ,4 }, {5, 6, 7, 8 } ,{9 ,10 ,11 ,12 } }; ---可以看出,二维数组初始化与一维数组初始化形似且神似

        2.所有元素直接写在一个花括号内

          int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; ---编译器会将元素按照分行方式对数组元素进行排列

        3.对部分元素进行赋初值

          1>int arr[3][4] = { {1}, {5}, {9} };

          2>int arr[3][4] = { {1, 2, 3 ,4 } };

        注意:二维数组初始化时,与一维数组也有不同的地方

          eg:可以直接声明int arr[3][4],不可以int arr[3][ ]--int arr[ ][4],更不可以int arr[ ][ ]  数组结构不完整

      数组使用(访问数组元素)

        二维数组有行号和列号,所以我们引用的时候需要注意row-col下标的使用,使用错误可能会导致数组越界等等error、warning问题

        二维数组访问元素的方式  arr[ row_index ][ col_index ] = e;

      二维数组结构图(个人想法,不知道合理性怎么样)

                

    #include<stdio.h>
    
    int main(){    
            // 二维数组的实质是也是一维数组 arr[row][col]
        // row->行    col->列
        int arr[3][4] = { 0 };    //二维数组的不完全初始化
        int col_t = sizeof(arr[0]) / sizeof(int);
        int row_t = sizeof(arr) / sizeof(int) / col_t;
        printf("row_t = %d col_t = %d
    ", row_t, col_t);
        for (int row = 0; row < row_t; row++) {
            for (int col = 0; col < col_t; col++) {
                            // 对二维数组进行复制操作
                arr[row][col] = (row + 1) * (col + 1);    
            }
        }
        // 打印q二位数组
        printf("打印全部二维数组的元素:
    ");
        for (int row = 0; row < row_t; row++) {
            for (int col = 0; col < col_t; col++) {
                printf("arr[%d][%d] = %d   ", row, col, arr[row][col]);
            }
            printf("
    ");
        }
        // 打印每一行的元素
        printf("打印第二行的全部元素:");
        for (int col = 0; col < col_t; col++) {
            printf("arr[1][%d] = %d   ",col,arr[1][col]);
        }
        printf("
    ");
            return 0;
    }

     

        

        

  • 相关阅读:
    怎样进行产品定位(上)
    crm2011创建货币Money类型的字段
    Cocos2dx 3.0 过渡篇(二十九)globalZOrder()与localZOrder()
    Linux显示全部执行中的进程
    How to Copy and Paste in the Ubuntu Gnome Terminal
    [LeetCode] Summary Ranges
    【Python】 做一个简单的 http server
    使用Visual Studio创建简单的自己定义Web Part 部件属性
    【windows socket+TCPserverclient】
    ACM-经典DP之Monkey and Banana——hdu1069
  • 原文地址:https://www.cnblogs.com/bj3251101/p/10714843.html
Copyright © 2011-2022 走看看