• C语言——数组(学习分享)


    ♥<一>. 一维数组

    1.一维数组的_创建和初始化

    a. 创建

    数组是一组相同类型元素的集合
    数组创建方式👇
    在这里插入图片描述举个栗子:

    int num[5]char arr[5*8];
    
    • 1
    • 2

    显然,数组num中的元素为int类型,且数组大小为5
    数组arr中的元素为char类型,且数组大小为5*8 = 40

    b.初始化

    1.不完全初始化
    2.完全初始化
    初始化:在创建数组的同时给数组的内容以初始值

    🍓不完全初始化

    在这里插入图片描述
    (关于数组元素的访问,在下面“2.一维数组的_使用”开头会提到,可先看那部分,便于理解)

    上面这个例子是不完全初始化,即数组arr前5个元素(arr[0]~arr[4])分别赋1、2、3、4、5,其余未初始化的元素默认为0

    🍓完全初始化

    在这里插入图片描述欸嘿,这个例子就是完全初始化了
    等价于arr[0] = 1,
    arr[1] = 2,
    arr[2] = 3,
    arr[3] = 4.
    arr[4] = 5

    🍓全部初始化为0

    在这里插入图片描述像这样直接写一个 0,就表示给数组arr中的五个元素全部初始化为0

    🍓不指定数组大小时

    在创建数组的时候,如果想不指定数组的确定的大小就得初始化。
    此时,数组的元素个数根据初始化的内容来确定。
    如:
    在这里插入图片描述此时就根据数组初始化的内容,确定数组大小为5
    ⭐但是⭐
    要注意,
    在这里插入图片描述(对于字符数组,‘\0’作为字符结束的标志)
    不指定数组大小时,对arr1这样初始化数组时会默认在字符串后加一个\0,此时数组大小就是3;
    但是对于arr2,需要人工给他加上’\0’,否则在abc后是随机储存乱码,直到出现’\0’

    2.一维数组的_使用

    1. 数组是使用下标来访问的,下标是从0开始。
    2. 数组的大小可以通过计算得到

    🍑下标引用操作符

    {
    “下标引用操作符”:
    ⭐数组通过下标来访问,数组中第一个元素的下标为0,往后依次递增
    ⭐arr[10]是我们在定义数组时,指定数组大小为10。当要打印数组arr的第3个元素时
    printf(“%d”,arr[2]);
    其中的arr[2]是指访问数组中的某一个具体元素
    ⭐[ ]——就是下标引用操作符
    }

    🍑计算数组元素个数

    显然在这里插入图片描述

    数组的大小➗每个元素的大小 = 数组元素的个数
    在这里插入图片描述

    🍑输入输出

    思路:给数组从arr[ 0 ]开始赋值,很容易想得到用for循环,依次给各个元素赋值,同理,用for循环给他依次打印出来
    在这里插入图片描述
    在这里插入图片描述

    3.一维数组_在内存中的存储

    keyword:连续!
    在这里插入图片描述地址是十六进制的数字,(123456789abcdef,a相当于10→f相当于15)

    可以看出来,地址是连续的,比如&arr[ 0 ]和&arr[ 1 ], 8+4 = 12(即为c)
    因为arr数组中的元素是int类型,占4字节,所以每个元素的地址相差4
    在这里插入图片描述

    ♥<二>.二维数组

    1.二维数组的_创建和初始化

    a.创建

    跟一维数组类似,只不过二维数组带两个方括号
    像这样👇
    在这里插入图片描述

    可以把二维数组理解成一个矩阵,第一个方括号内的数代表行,第二个方括号内的数表示列
    比如上面arr2:
    在这里插入图片描述

    b.初始化

    🍈一般情况

    ⭐对于二维数组,行可以省,列不能省
    在这里插入图片描述对于arr1:自左到右自上而下依次初始化,其余元素为0。arr1[0][0]、arr1[0][1]、arr1[0][2]、arr1[0][3]、arr1[1][0]分别初始化为1、4、6、9、7;其余为0
    对于arr2:1,2一组;3,4一组。即,arr2[0][0]、arr2[0][1]、arr[1][0]、arr2[1][1]分别为1、2、3、4
    对于arr3:类比一维数组“数组的元素个数根据初始化的内容来确定”,对于二维数组,根据初始化内容确定行数

    🍈全部初始化为0

    与一维数组一模一样
    在这里插入图片描述

    2.二维数组的_使用

    🍉计算数组元素个数

    计算方法是两个方括号内的常量(表达式)相乘
    同样,类比一维数组,
    在这里插入图片描述

    🍉输入输出

    一维数组相当于只有“一行”
    而二维数组有“一行一列”,因此可以用for循环嵌套for循环来实现二维数组的输入输出
    在这里插入图片描述

    3.二维数组_在内存中的存储

    像一维数组一样,我们尝试打印二维数组arr的每个元素的地址
    在这里插入图片描述注意这个地方👇
    在这里插入图片描述第一行的最后一个元素跟第二行第一个元素的地址相差也为4!
    这说明,二位数组中元素的地址也是连续的,相当于:
    在这里插入图片描述可以得出结论:二维数组在内存中的存储也是连续的

    ♥<三>.数组越界

    数组的下标是有范围限制的。数组的下标规定从0开始,如果数组有n个元素,最后一个元素的下标就是n-1。所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
    比如:
    在这里插入图片描述这个数组arr只有5个元素,最后一个元素的下标为4
    因此arr[5]就是非法的了,越界了。
    对于二维数组,它的行和列也可能存在越界

    ⭐⭐⭐要注意,C语言本身不做数组下标的越界检查,像这个例子一样,编译器没报错,也能打印arr[5]的值。但是编译器不报错,并不意味着程序就正确,所以写代码时,要检查好数组是否越界~~

  • 相关阅读:
    第一章 计算机系统概述
    Java 中实现单例模式
    软件测试/测试开发丨Selenium Web自动化多浏览器处理
    【路径规划】基于拓展随机树算法RRT的路径规划问题附Matlab代码
    算法刷题:位运算及其他拓展
    javascript 进阶教程(01)
    STM32CubeMX教程8 TIM 通用定时器 - 输出比较
    【饮食的迷思--人类必看的真正的饮食长寿指南--来自英国国王学院顶级遗传性流行病教授】---智人必须会的生活技能 by Tim Spector--饮食的迷思
    Tomcat过时了?别多想,很多公司还是在用的。这份Tomcat架构详解,真的颠覆你的认知
    次氯酸(HClO)荧光探针 激发波长567 nm
  • 原文地址:https://blog.csdn.net/m0_74195626/article/details/127836180