一.数组的定义
类型 数组名[元素个数]
int a[6];
char b[24];
double c[3];
上面的几个类型,都占多少字节内存?
• 元素数量必须是整数
• C99之前:元素数量必须是编译时刻确定的字面量
• 是一种容器(放东西的东西),特点是:
• 其中所有的元素具有相同的数据类型;
• 一旦创建,不能改变大小
• *(数组中的元素在内存中是连续依次排列的)
二.有效的下标范围
• 编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写
• 一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃
• segmentation fault!
• 但是也可能运气好,没造成严重的后果
• 所以这是程序员的责任来保证程序只使⽤用有效的下标值:[0,数组的⼤大小-1]
• 循环跟数组的关系
实现一个执行10次的循环,通常是这么写:
for(i=0;i<10;i++){
......
}
#include <stdio.h> #define num 10 int main() { int s[num]; int i,sum=0; for(i=0;i<num;i++){ printf("请输入第%d个学生成绩:",i+1); scanf("%d",&s[i]); sum +=s[i]; } printf("平均分是%d ",sum/10); return 0; }
三.数组的初始化
1.将数组中所有元素统一初始化为某个值,可以这么写:
int a[10]={0}; //将数组中所有元素初始化为0
2.如果是赋予不同的值,可以用逗号分隔开:
int a[10]={1,2,3,4,5,6,7,8,9,0};
3.还可以只给一部分赋值,那么其他元素将自动初始化为0;
int a[10]={1,2,3,4,5};
4.C99增加了一种新特性:指定初始化元素:
int a[10]={[3]=3, [5]=5, [8]=8};
#include <stdio.h> int main() { int a[10] = {[3] = 3, [5] = 5, [8] = 8}; int i; for (i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("%d ", sizeof(a)); return 0; }