hello,大家好,我是霜淮子,阅读我的文章学习c语言,作者水平有限,如果发现错误的地方,欢迎大家在评论区留言,万分感谢!
欢迎订阅专栏《c语言程序设计》
目录
前言
对于同类型批量数据的组织方式,可以使用数组。
数组是指具有内在联系的一组相同类型变量的有序集合,它用一个统一的数组名来表示这一组变量,用序号来说明每个变量在数组中的相对位置,数组中的每个变量就称为数组元素,表面数组在数组中相对位置的序号就称为元素的下标。
7.1、数组
7.1.1、数组的使用
定义数组
<类型>变量名称[元素数量]
例如:int grades[100];
- 元素数量必须是整数
数组
- 是一种容器,特点是:
- 其中所有的元素具有相同的数据类型;
- 一旦创建,不能改变大小
- 数组中的元素在内存中是连续一次排列的
数组的单元
- 数组的每个单元就是数组类型的一个变量
- 使用数组时放在[]中的数字叫做下标或索引,下标从0开始计数
有效的下标范围
- 编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元还是写
- 一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃
- segmentation fault
- 但是也可能运气好,没有造成严重的后果
- 所以我们在编写程序的时候通过使用有效的下标值:[0,数组的大小-1]
能否创建一个长度为0的数组
- int a[0]
- 可以存在,但是无用
7.1.2、数组的例子:统计个数
写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束。
#include<bits/stdc++.h>
using namespace std;
int main(void){
int x;
int count[10];
int i;
for(i=0;i<10;i++){
count[i]=0;
}
scanf("%d",&x);
while(x!=-1){
if(x>=0&&x<=9){
count[x]++;
}
scanf("%d:%d\n",&x);
}
for(i=0;i<10;i++){
printf("%d:%d\n",i,count[i]);
}
return 0;
}
7.2、数组的运算
集成初始化
- 用[n]在初始化数据中给出定位
- 没有定位的数据接在前面的位置后面
- 其他位置直接补0
- 也可以不给出数组大小,让编译器自己算
- 特别适合初始数据稀疏的数组
数组的大小
sizeof(a)/sizeof(a[0])
- sizeof(a[0])给出数组中单个元素的大小,于是相处就得到了数组的单元个数
- 这样的代码,一旦修改数组中初始的数据,不足要修改遍历的代码
遍历数组
- 通常都是使用for循环,让循环变量i从0到<数组的长度,这样循环体内最大的i正好是数组最大的有效下标
- 常见的错误是:
- 循环结束条件是<=数组长度。或:
- 离开循环后,继续使用i的值来做元素的下标!
注意:
- 数组作为函数的参数时:
- 不能在[]中给出数组的大小
- 不能利用sizeof来计算数组的元素个数
7.2.2、二维数组
int a[3][5];
通常理解为a是一个3行5列的矩阵;
二维数组的遍历
for(i=0;i<3;i++){
for(j=0;j<5;j++){
a[i][j]=i*j;
}
}
- a[i][j]是一个int
- 表示第i行第j列上的单元
-END-