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;
    }

     

        

        

  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/bj3251101/p/10714843.html
Copyright © 2011-2022 走看看