数组

  • 是一种容器(放东西的东西),特点是: •

    • 其中所有的元素具有相同的数据类型;
    • 一旦创建,不能改变大小
    • 数组中的元素在内存中是连续依次排列的
  • int number[100];
  • scanf("%d”,&numberli);

定义数组

  • <类型>变量名称[元素数量];

    • int grades[100];
    • double weight[20];
  • 元素数量必须是整数
  • C99之前:元素数量必须是编译时刻确定的字面量

int a[10]

  • 一个int的数组
  • 10个单元:a[0],a[1]...,a[9]

  • 每个单元就是一个int类型的变量
  • 可以出现在赋值的左边或右边:

    • a[2]= a[1]+6;
  • 在赋值左边的叫做左值

数组的单元

  • 数组的每个单元就是数组类型的一个变量
  • 使用数组时放在[]中的数字叫做下标或索引,下标从0 开始计数:

    • grades[0]
    • grades[99]
    • average[5]

有效的下标范围

  • 编译器和运行环境都不会检查数组下标是否越界,无 论是对数组单元做读还是写
  • 一旦程序运行,越界的数组访问可能造成问题,导致 程序崩溃

    • ' segmentation fault '
  • 但是也可能运气好,没造成严重的后果
  • 所以这是程序员的责任来保证程序只使用有效的下标 值:[0,数组的大小一1]

长度为零的数组

  • int a[0];
  • 可以存在,但是无用

写一个程序,输入数量不确定的[0,9]范围 内的整数,统计每一种数字出现的次数, 输入-1表示结束

数组的集成初始化

int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32};
  • 直接用大括号给出数组的所有元素的初始值
  • 不需要给出数组的大小,编译器替你数数

集成初始化时的定位

int a[10]={ [0]= 2,[2]= 3, 6,}

  • 用[n]在初始化数据中给出定位
  • 没有定位的数据接在前面的位置后面
  • 其他位置的值补零
  • 也可以不给出数组大小,让编译器算
  • 特别适合初始数据稀疏的数组

数组的大小

sizeof给出整个数组所占据的内容的大小,单位是字节

sizeof(a)/sizeof(a[0])
  • sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数
  • 这样的代码,一旦修改数组中初始的数据,不需要修 改遍历的代码

参考资料

程序设计入门——C语言\_浙江大学\_中国大学MOOC(慕课) (icourse163.org)

最后修改:2023 年 10 月 21 日
如果觉得我的文章对你有用,请随意赞赏