1、一维数组的初始化方式
数组初始化赋值是指数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。
初始化方式有两种:1) 定义的同时初始化 2) 先定义,后初始化。
(1) 定义的同时初始化
常见形式为:
类型说明符 数组名[常量表达式] = {值1, 值2, 值3, ..., 值n};
其中在{}中的各数据值即为各元素的初值,各值之间用逗号间隔。例如:int a[3] = {1, 2, 3};
又细分为以下几种情况:
1> 指定元素个数的同时,对所有的元素进行显式的初始化
int nums[5] = {1, 2, 3, 4, 5};
2> 指定数组的元素个数,对数组进行部分显式初始化
定义的同时对数组进行初始化,没有显式初始化的元素,那么系统会自动将其初始化为0
int nums[10] = {1, 2};
3> 不指定元素个数,定义的同时初始化,它是根据大括号中元素的个数来确定数组元素的个数。
int nums[] = {1, 2, 3, 9, 5};
4> 指定元素个数, 同时给指定元素进行初始化
int nums[5] = {[4] = 3, [1] = 2};
给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法。
注意:
1 //先定义数组,然后对数组进行初始化
2 //使用常量作为元素个数
3 int a[3];
4 a[0] = 1;
5 a[1] = 4;
6 a[2] = 3;
1 //使用变量作为元素个数:C99不支持使用变量作为元素个数,但LLVM编译器支持
2 int len = 5;
3 int scores[len];
4 scores[0] = 87;
5 scores[1] = 34;
6 scores[2] = 12;
7 scores[3] = 45;
8 scores[4] = 56;
关于数组的几个让人疑惑的问题
(1) 数组如果没有进行初始化,数组中到底有没有值?啥东西?
1> 整型数组
2> 实型数组
3> 字符数组
结论:如果定义数组后,没有初始化,数组中是有值的,是随机产生的垃圾值,所以如果想要正确地使用数组必须进行初始化。
(2)数组如果部分初始化,那么没有初始化的元素是什么?
整型
实型
字符型
结论:对于整型、实型数组来说,一旦有元素被初始化,其他元素都被赋值0,字符型的还是随机的垃圾值。
思考&实现1: 通过for循环,从键盘获取10个数,存放到数组中。
思路:循环10,下标从0-9; 每次从键盘获取一个值,放到arr[i]
1 #include <stdio.h>
2 int main(int argc, const char * argv[])
3 {
4 int arr[10];
5 //从键盘获取数组元素
6 for(int i = 0; i < 10; i++)
7 {
8 //输入数组元素,用空格或回车或tab隔开
9 scanf("%d", &arr[i]);
10 }
11 //遍历数组元素并打印出来
12 for(int i = 0; i < 10; i++)
13 {
14 printf("%d ", arr[i]);
15 }
16 return 0;
17 }
2、一维数组的引用方式
数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为数组名后跟一个下标。
下标表示元素在数组中的顺序号
数组元素访问一般形式为: 数组名[下标]
其中下标只能为整型常量或整型表达式。
例如:a[3] a[i+j] a[i++] 都是合法的数组元素
数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。
在C语言中,只能逐个使用下标变量,而不是一次引用整个数组。
思考&实现2: 通过for循环,打印数组元素
1 #include <stdio.h>
2 int main(int argc, const char * argv[])
3 {
4 char ch[5] = {'a', 'b', 'e', 'r', 'o'};
5 //遍历数组元素并打印出来
6 for(int i = 0; i < 5; i++)
7 {
8 printf("%c ", ch[i]);
9 }
10 return 0;
11 }
下面是错误的写法(此处通过数组名不能获取整个数组内容)
思考&实现3: 通过for循环,从键盘获取10个数,存放到数组中。并使用for循环输出查看
1 #include <stdio.h>
2 int main(int argc, const char * argv[])
3 {
4 int arr[10];
5 //从键盘获取数组元素
6 for(int i = 0; i < 10; i++)
7 {
8 //输入数组元素,用空格或回车或tab隔开
9 scanf("%d", &arr[i]);
10 }
11 //遍历数组元素并打印出来
12 for(int i = 0; i < 10; i++)
13 {
14 printf("%d ", arr[i]);
15 }
16 return 0;
思考&实现4: 通过for循环,从键盘获取10个数,存放到数组中。并使用for循环输出查看 (按倒序输出)
1 #include <stdio.h> 2 int main(int argc, const char * argv[]) 3 { 4 int arr[10]; 5 //从键盘获取数组元素 6 for(int i = 0; i < 10; i++) 7 { 8 //输入数组元素,用空格或回车或tab隔开 9 scanf("%d", &arr[i]); 10 } 11 //遍历数组元素并打印出来 12 for(int i = 9; i >= 0; i--) 13 { 14 printf("%d ", arr[i]); 15 } 16 return 0; 17 }