7.郝斌C语言笔记——数组

为什么需要数组

    为了解决大量同类数据的存储和使用问题
    为了模拟现实世界
例子:
    int a[5] = {1, 2, 3, 4, 6};
    a是数组的名字
    5代表数组元素的个数,并且这5个元素分别用:
    a[0],a[1],a[2],a[3],a[4],
    来表示

数组的分类

    > 一维数据
        - 怎样定义一维数组
            为n个变量连续分配存储空间
            所有的变量数据类型必须相等
            所有变量所占的字节大小必须相等

        - 有关一维数组的操作
            初始化:
                完全初始化
                    int a[5] = {1, 2, 3, 4, 5};
                不完全初始化,未被初始化的元素自动为零
                    int a[5] = {1, 2, 3};
                不初始化,所有元素都是垃圾值
                    int a[5];
                清零
                    int a[5] = {0};

            错误写法:
                int a[5];
                a[5] = {1, 2, 3, 4, 5};//错误
                只有在定义数组的同时才可以整体赋值,
                其他情况下整体赋值都是错误的

                int a[5] = {1, 2, 3, 4, 5};
                a[5] = 100;//错误
                因为没有a[5]这个元素,最大只有a[4]

                int a[5] = {1, 2, 3, 4, 5};
                int b[5];
                如果要把a数组中的值全部复制给b数组
                    错误的写法:
                        b = a;//错误
                    正确的写法:
                        for (i = 0; i < 5; ++i)
                            b[i] = a[i];
            
            注意:
                int a[5];
                一维数组名不代表数组中所有的元素,
                一维数组名代表数组第一个元素的地址

            还有其他操作:
                赋值
                排序
                求最大/小值
                倒置
                查找
                插入
                删除
        
    > 二维数组
        - int a[3][4];
            总共是12个元素,可以当做34列看待,12个元素的名字依次是:
                a[0][0]  a[0][1]  a[0][2]  a[0][3]
                a[1][0]  a[1][1]  a[1][2]  a[1][3]
                a[2][0]  a[2][1]  a[2][2]  a[2][3]
            a[i][j]表示 第i+1行 第j+1列 的元素
            int a[m][n];该二维数组右下角位置的元素只能是a[m-1][n-1]
            
        - 初始化
            int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
            或者
            int a[3][4] = {
                {1, 2, 3, 4},
                {5, 6, 7, 8},
                {9, 10, 11, 12}
            }

        - 输出数组内容
            输出二维数组内容:
                int a[3][4] = {
                    {1, 2, 3, 4},
                    {5, 6, 7, 8},
                    {9, 10, 11, 12}
                } 
                int i,j;

                //输出数组内容
                for (i = 0; i < 3; ++i)
                {
                    for (j = 0; j < 4; ++j)
                        printf("%d", a[i][j]);
                    printf("\n");
                }
            
        - 还有其他操作:
            对二维数组排序
            求每一行的最大值
            判断矩阵是否对称
            矩阵的相乘
        
    > 多维数组
        - 是否存在多维数组
            不存在,因为内存是线性一维的
            n维数组可以当做每个元素是n-1维数组的一维数组
            比如:
                int a[3][4]
                    该数组是含有3个元素的一维数组,
                    只不过每个元素都可以再分成4个小元素
                int a[3][4][5]
                    该数组是含有3个元素的一维数组,
                    只不过每个元素都是45列的二维数组

例子 —— 倒置数组

    /*
        时间:2020年2月15日
        功能:倒置数组
        目的:举例
    */
    #include <stdio.h>

    int main(void)
    {
        int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
        int i, j;
        int t;

        i = 0;
        j = 7;
        while (i < j)
        {
            t = a[i];
            a[i] = a[j];
            a[j] = t;

            ++i;
            --j;
        }

        for (i = 0; i < 8; ++i)
            printf("a[%d] = %d\n", i, a[i]);

        return 0;
    }
    /*
        在Microsoft Visual Studio 2010的过程:
        -----------------------------------
            a[0] = 8
            a[1] = 7
            a[2] = 6
            a[3] = 5
            a[4] = 4
            a[5] = 3
            a[6] = 2
            a[7] = 1
            请按任意键继续. . .
        -----------------------------------

        总结:
            ... ...
    */  

如有不对或者疏漏的地方,请多多指出。谢谢(⁄ ⁄•⁄ω⁄•⁄ ⁄)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值