C程序设计语言:数组

第7周:数组

标签(空格分隔): C


7.1.1 数组:数组的使用

定义数组
  • <类型> 变量名称[元素数量];
    • int grades[100];
    • double weight[20];
  • 元素数量必须是整数
  • C99之前:元素数量必须是编译时刻确定的字面量
数组
  • 是一种容器(放东西的东西),特点是:
    • 其中所有的元素具有相同的数据类型;
    • 一但创建,不能改变大小
    • 数组中的元素在内存中是连续依次排列的
  • 可以出现在赋值的左边或右边:(左读,右写)
    • 在赋值左边叫做左值
数组的单元
  • 数组的每个单元就是数组类型的一个变量
  • 使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数
有效的下标范围
  • 编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写
  • 一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃
    • segmentation fault
  • 但是也
  • 可能运气好,没造成严重的后果
  • 所以这是程序员的责任来保证程序只使用有效的下标值:[0,数组的大小-1]
数组使用
  • 数组的大小
    • const int number = 10
  • 定义数组
    • int count[number]
  • 初始化数组
    • count[i]
  • 数组参与运算
    • count ++
  • 遍历数组输出

7.2.1 数组运算:数组运算

数组的集成初始化
  • int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32}
    • 直接用大括号给出数组的所有元素的初始值
    • 不需要给出数组的大小,编译器替你数数
集成初始化时的定位
  • int a[10] = { [0] = 2, [2] = 3, 6, }
    • 即,a[0]=2,a[2]=3, a[3]=6,其他都是0
  • 用[n]在初始化数据中给出定位
  • 没有定位的数据接在前面的位置后面
  • 其他位置的值补零
  • 也可以不给出数组大小,让编译器算
  • 特别适合初始数据稀疏的数组
数组的大小
  • sizeof 给出整个数组所占据的内容的大小,单位是字节
sizeof(a)/sizeof(a[0])
  • sizeof(a[0]) 给出数组中单个元素的大小,于是相除就得到了数组的单元个数
数组的赋值
  • 数组变量本身不能被赋值
  • 要把一个数组的所有元素交给另一个数组,必须采用遍历
 for (i=0;i<length;i++){
    b[i] = a[i];
}
遍历数组
  • 通常都是使用for循环,让循环变量i从0到<数组的长度,这样循环体内最大的i正好是数组最大的有效下标
  • 常见错误是:
    • 循环结束条件是<=数组长度,或:
    • 离开循环后,继续用i的值来做数组元素的下标
  • 数组作为参数时,往往必须再用另一个参数来传入数组的大小
  • 数组作为函数的参数时:
    • 不能在[]中给出数组的大小
    • 不能再利用sizeof来计算数组的元素个数

7.2.2 数组运算:二维数组

二维数组的遍历
for (i=0;i<3;i++) {
    for (j=0;j<5;j++) {
        a[i][j] = i*j;
    }
}
  • a[i][j] 是一个int
  • 表示第 i 行第 j 列上的单元
二维数组的初始化
int a[][5] = {
    {0,1,2,3,4},
    {2,3,4,5,6},
};
  • 列数是必须给出的,行数可由编译器来数
  • 每行一个{},逗号分隔
  • 最后的逗号可以存在,有古老的传统
  • 如果省略,表示补零
  • 也可以用定位
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值