目录
1、数组
简介:是一种容器
<类型> 变量名称[元素数量] ( c99之前元素数量必须是整数)
int grades[100]; double weight[20]; 元素数量变量必须为整数
[下标]中从零开始数
#include <stdio.h>
int main(void)
{
// 数组的大小
const int number = 10;
int x;
// 定义数组
int count[number];
int i;
// 初始化数组
for (i = 0; i < number; i++)
{
count[i] = 0;
}
scanf_S("%d" , &x);
while( x != -1){
if(x >= 0 && x <= 9){
// 数组参与运算
count[x] ++;
}
scanf_S("%d" , &x);
}
// 遍历数组输出
for (i = 0; i < number; i++)
{
printf("%d:%d\n", i , count[i]);
}
return 0;
}
2、一维数组
定义:一维数组,是由数字组成的以单纯的排序结构排列的结构单一的数组,是计算机程序中最基本的数组。
当中每个元素都只带有一个下标时,称这样的数组为一维数组。(如:数组名[常量表达式] )
注:数组作为函数参数时,往往必须再用另一个参数来传入数组的大小
如下例题:找出key在数组a中的位置
key表示要寻找的数字 a要寻找的数组 length数组a的长度
如果找到,返回在a中的位置,如果找不到就返回-1
#include<stdio.h>
int search(int key, int a[],int length){
int ret = -1;
int i;
for ( i = 0; i < length; i++)
{
if (a[i] == key) {
ret = i;
break;
}
}
return ret;
}
int main(void){
int a[] = { 2,4,6,7,1,3,5,9,11,13,23,14,32, };
int x;
int loc;
printf("请输入一个数字:");
scanf_s("%d", &x);
loc = search(x, a, sizeof(a) / sizeof(a[0]));
if (loc!=-1)
{
printf("%d在第%d个位置上\n", x, loc);
}
else
{
printf("%d不存在\n", x);
}
return 0;
}
因为如果数组作为函数参数:
- 不能在[ ]中给出数组的大小
- 不能再利用sizeof来计算数组的元素个数!
3、二维数组
二维及多维数组可以看作是一维数组的多次叠加产生的。(两对[ ] [ ])
数组名[常量表达式][常量表达式]
4、变长数组
变长数组:数组大小待定的数组,C语言中结构体的最后一个元素可以是大小未知的数组,也就是所谓的0长度。
它的主要用途是为了满足需要变长度的结构体,为了解决使用数组时内存的冗余和数组的越界问题。
对于变长数组的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等
5、数组的大小
sizeof给出整个数组所占据的内容大小,单位是字节
sizeof(a)/sizeof(a[0])
sizeof(a[0])给出数组中单个元素的大小,于是相除得到了数组的单元个数
这样,一旦修改数组中初始的数据,就不需要再修改遍历的代码
6、遍历数组
通常使用for循坏。
让循坏变量i从0到<数组的长度,这样循环体内最大的i正好是数组最大的有效下标。
7、数组常见错误
1.循坏结束条件是<=数组长度
2.离开循坏后,继续用i的值来做数组元素的下标!