数组
什么是数组?
数组由数据类型相同的一系列元素组成。需要使用数组时,通过声明数组告诉编译器数组中内含多少元素和这些元素的类型。编译器根据这些信息正确地创建数组。普通变量可以使用的类型,数组元素都可以用。考虑下面的数组声明:
/* 一些数组声明 */
int main(void){
float one[365]; //内含365个float类型元素的数组
char code[12]; //内含12个char类型的数组
int two[50]; //内含50个int类型的数组
double three[30]; //内含30个double类型元素的数组
/*..........*/
}
若要访问数组中的元素,通过使用数组下标数(也叫做索引)表示数组中的各个元素
初始化数组
1.花括号初始化法
#include "stdio.h"
#define months 12
int main(){
int days[months]={31,28,31,30,31,30,31,31,30,31,30,31};
int index;
for(index=0;index<months;index++)
printf("\n month %2d has %2d days.",index+1,days[index]);
return 520;
}
当然这个程序还不够完善,它所表示的只是平年每个月的天数,至于程序的完善希望读者可以拿来练手这种初始化方法。
for循环初始化
#include "stdio.h"
#define months 12
int main(){
int days[months];
int index;
for(index=0;index<months;index++){
printf("\n please input the %dth number(int):",index+1);
scanf("%d",&days[index]);
}
//初始化完成
for(index=0;index<months;index++)
printf("\n month %2d has %2d days.",index+1,days[index]);
return 520;
}
当然这个程序中也会有许多小瑕疵,比如用户输入的内容万一不是整数类型怎么办,这时请大家看我的另一篇文章,讲述如何实现scanf的优化。https://blog.csdn.net/qq_42392049/article/details/112604480
指定初始化器(C99)
C99增加了一个新特性:指定初始化器( designated initializer)。 利用该特性可以初始化指定的数组元素。例如,只初始化数组中的最后一个元素。对于传统的C初始化语法,必须初始化最后一个元素之前的所有元素,才能初始化它:
int arr[6] = {0,0,0,0,0,212}; // 传统的语法
而C99规定,可以在初始化列表中使用带方括号的下标指明待初始化的元素:
int arr[6] = {[5] = 212}; //把arr[5]初始化为212
对于一般的初始化,在初始化-一个元素后,未初始化的元素都会被设置为0。
代码实例:
#include <stdio.h>
#define months 12
int main(){
int days[months]={31,28,[4]=31,30};
int i;
for(i=0;i<months;i++)
printf("\n %2d %d",i+1,days[i]);
return 0;
}
该程序在支持C99编译器中输出如下:
1 31
2 28
3 30
4 0
5 31
6 0
7 0
8 0
9 0
10 0
11 0
12 0
给数组元素赋值
这里我们着重看几个常见的错误赋值
#define size 5
int main(){
int oxen[size] ={5,3,2,9}; /*初始化没问题*/
int yaks[size];
yaks=oxen; /*不允许*/
yaks[size]=oxen[size]; /*数组下标越界*/
yaks[size]={5,3,2,8}; /*不起作用*/
}
这些错误是因为C不允许把数组作为一个单元赋给另一个数组,除初始化以外也不允许使用花括号列表的形式赋值。
指定数组的大小
int n=5;
int m=8;
float al[5]; //可以
float a2[5*2+1] //可以
float a3[sizeof(int)+1]; //可以
float a4[-4] //不可以 数组大小必须大于0
float a5[0]; //不可以
float a6[2.5]; //不可以
float a7[(int)2.5] //可以
float a8[n]; //C99之前不允许;
过两天来更新多维数组的知识总结。