C语言——原来如此简单,三分钟学会数组

一、什么是数组

        C 语言支持数组数据结构,数组存储一个固定大小的相同类型元素的顺序集合。

        一个数组变量,比如student,然后使用 student[0]、student[1]、...、student[100] 来代表一个个单独的变量。不需要声明一个个单独的变量,比如 student0、student1、...、student100

        所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。(即数组名就是数组首地址)

二、数组的初始化

1.完全初始化:
    int arr[5] = {1, 2, 3, 4, 5};
2.部分初始化
    int arr[5] = {1, 2, 3};
    依次赋值,没有被赋值到的元素自动补0;
    eg:
       int arr[5] = {0}; //全0
3.不给维数(下标)的初始化
    int arr[] = {1, 2, 3, 4, 5};
    //表示arr是一个可以存储5个整型元素的数组
    //数组的大小根据赋值的元素个数来确定的
    //sizeof(arr) == 20  (5个int类型)

三、数组的大小

数组的大小: sizeof(数组名);
单个元素所占字节数: sizeof(arr[0]) == sizeof(数据类型)
数组的大小 = 单个元素所占字节数 * 元素个数;
元素个数 = 数组所占字节数 / 单个元素所占字节数

四、字符一维数组及字符串

  • 字符串由多个字符组成,结尾自带 '\0'
    一般形式:
        存储类型 char 数组名[常量表达式];
        eg:
            char buf[32]:
        表示一个可以存储32个字符的数组;
    //--------------------------------------------
    字符数组的初始化:
    一、逐个字符赋值:
        1)完全初始化:
                    char buf[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
                    //一般都会将字符数组当成字符串来处理,
                    //当成字符串处理的时候就一定要保证有'\0'结尾;    
                    补充:
                        %s 输出遇 '\0'结束
                        %s 输入 遇到空格或者回车结束
        2) 部分初始化
                    char buf[6] = {'h', 'o', 'w'};
                    会逐个赋值,没有被赋值到的元素补上'\0';
        3) 不给下标的初始化
                    char buf[] = {'h', 'e', 'l', 'l', 'o', '\0'};
                    //数组占6字节
    二、字符串直接赋值
        char buf[6] = {"hello"};
        char buf[6] = "hello";
        char buf[] = "hello";
        ---> 由 'h' 'e' 'l' 'l' 'o' '\0' 共6个元素组成
    

五、进阶_二维数组

一般形式:
<存储类型> <数据类型><数组名>[常量表达式1][常量表达式2];
行 列
存储:
内存是一维的,二维数组的存储按行序优先
eg:
    int a[2][3]
    a[0][0] a[0][1] a[0][2]
    a[1][0] a[1][1] a[1][2]
一维数组:
    arr[5] --> arr arr + 1
    首地址 第二个元素的地址
二维数组的理解:
二维数组可以看成由多个一维数组组成
    int a[2][3]
    由两个元素组成 a[0] 和 a[1] 组成
    a[2][3] --> {a[0], a[1]}
    a[0] 相当于第一个一维数组的数组名;
    a[0][0] a[0][1] a[0][2]
    a[1] 相当于第二个一维数组的数组名
    a[1][0] a[1][1] a[1][2]

二维数组的大小

二维数组的大小 = 单行所占字节数 * 行数
sizeof(a) == sizeof(a[0]) * 行数
单行所占字节数 == 单个元素所占字节数 * 列数
sizeof(a[0]) == sizeof(a[0][0]) * 列数

二维数组的引用

二维数组名[下标][下标];
行 列
逐个访问;
eg:
    按行序给二维数组赋值;
    int a[3][2];
    a[0][0] = 1; //第一行 a[0]
    a[0][1] = 2;
    a[1][0] = 3; //第二行 a[1]
    a[1][1] = 4;
    a[2][0] = 5; // 第三行 a[2]
    a[2][1] = 6;

初始化

1.按元素排列顺序初始化
    int arr[2][3] = {1, 2, 3, 4, 5, 6}; //完全初始化
    int arr[2][3] = {1, 2}; //部分初始化
    int arr[2][3] = {0}; //部分初始化
    int arr[][3] = {1, 2, 3, 4}; //不给维数的初始化
    /*这个数组至少需要两行才能存下,这个数组最多只能存两行,
    数组大小为 24字节 --> 6个元素*/
2.按分行初始化
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; //完全初始化
    int arr[2][3] = {{1}};//部分初始化
    int arr[2][3] = {{1}, {2, 3}};//部分初始化
    int arr[][3] = {{0}, {0}}; //给了几行就最多能存几行
    int arr[][3] = {{1, 2, 3}, {4, 5, 6}};
    //给了几个分行就最多能存几行
    注意:在省略维数的时候,只能省略行的下标

转义字符

"\x69\076";
这个字符串由 '\x69' 和字符 '\076' '\0' 三个字符组成;
一个字符 ascii 的八进制和十六进制可以用转义字符表示;
    char ch = 'A';
    printf("ch = %c\n", ch);
    ch = 65;
    printf("ch = %c\n", ch);
    ch = '\101';   // ch = 0101;
    printf("ch = %c\n", ch);
    ch = '\x41';   // ch = 0x41;
    printf("ch = %c\n", ch);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值