数组
语法: 类型 数组名[元素个数];
int a[6]; // 4*6 字节
char b[24]; // 1*24 字节
double c[2]; // 2*8 字节
访问数组中的元素
语法: 数组名[元素下标]
a[2];
b[4];
c[1];
- 注意
int a[6];
a[0]; // 访问第一个元素
a[6]; // 访问第七个元素 出现数组越界。
使用循环给数组赋值
#include<stdio.h>
#define NUM 10
int main(){
int a[NUM];
int i,sum=0;
for(i = 0;i < NUM;i++){
printf("请输入第%i位同学的成绩:",i+1);
scanf("%d",&a[i]);
sum+=a[i];
}
printf("成绩录入完毕,该次考试的平均分是:%.2f
",(double) sum/NUM);
return 0;
}
初始化
语法: 类型 数组名[元素个数] = {n,n+1,....};
#include<stdio.h>
#define NUM 5
int main(){
int a[NUM] = {0};
int b[NUM] = {1,2,3,4,5};
int i;
for (i = 0;i < NUM;i++){
printf("a的第%d个元素为:%d
",i+1,a[i]);
printf("b的第%d个元素为:%d
",i+1,b[i]);
}
return 0;
}
a的第一个元素为:0
b的第一个元素为:1
a的第一个元素为:0
b的第一个元素为:2
a的第一个元素为:0
b的第一个元素为:3
a的第一个元素为:0
b的第一个元素为:4
a的第一个元素为:0
b的第一个元素为:5
#include<stdio.h>
#define NUM 5
int main(){
int a[NUM];
int b[NUM] = {1,2,3,4,5};
int i;
for (i = 0;i < NUM;i++){
printf("a的第%d个元素为:%d
",i+1,a[i]);
printf("b的第%d个元素为:%d
",i+1,b[i]);
}
return 0;
}
a的第一个元素为:0
b的第一个元素为:1
a的第一个元素为:0
b的第一个元素为:2
a的第一个元素为:26
b的第一个元素为:3
a的第一个元素为:0
b的第一个元素为:4
a的第一个元素为:0
b的第一个元素为:5
- 有时候初始化了数组的值,可以在定义的时候不写数组的长度
#include<stdio.h>
#define NUM 5
int main(){
int b[] = {1,2,3,4,5};
int i;
for (i = 0;i < NUM;i++){
printf("b的第%d个元素为:%d
",i+1,b[i]);
}
return 0;
}
- c99 新特性:指定初始化的元素。未被赋值的元素自动初始化 0;
#include<stdio.h>
#define NUM 5
int main(){
int b[5] = {[3] = 4,[4] = 7};
int i;
for (i = 0;i < NUM;i++){
printf("b的第%d个元素为:%d
",i+1,b[i]);
}
return 0;
}
b的第1个元素为:0
b的第2个元素为:0
b的第3个元素为:0
b的第4个元素为:4
b的第5个元素为:7
- sizeof
#include<stdio.h>
#define NUM 5
int main(){
int b[5] = {[3] = 4,[4] = 7};
int i;
for (i = 0;i < NUM;i++){
printf("b的第%d个元素为:%d
",i+1,b[i]);
}
printf("sizeof b:%d个字节",sizeof(b));
return 0;
}
b的第1个元素为:0
b的第2个元素为:0
b的第3个元素为:0
b的第4个元素为:4
b的第5个元素为:7
sizeof b:20个字节
- c99 支持可变长度,是值用变量指定数组的长度
#include<stdio.h>
int main(){
int n,i;
printf("请输入字符串个数:");
scanf("%d",&n);
char a[n+1];
printf("请输入字符串:");
getchar(); // 把输入字符串个数之后的回车键获取扔掉
for(i = 0;i < n; i++){
scanf("%c",&a[i]);
}
a[n] = ' ';
printf("你输入的字符串是:%s
",a);
return 0;
}
在录入数据的时候会出现换行,所以在 for 前加上
getchar();
数组越界
#include<stdio.h>
int main(){
int a[10],i;
for(i = 0;i <= 10; i++){
a[i]=i;
}
for(i = 0;i <= 10; i++){
printf("%d
",a[i]);
}
return 0;
}
0
1
2
3
4
5
6
7
8
9
10
可以打印出 11 个元素,越界不报错的原因是编译器做了手脚。不是所有的编译器可以正常执行。
字符数组
定义方式
- 初始化字符串数组每个元素,以