数组初识

数组初识

  数组是一个大小固定、能够存储相同类型元素的顺序集合,属于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;
}

 

    

    

原文地址:https://www.cnblogs.com/bj3251101/p/10714843.html