19-一维数组的初始化和引用方式

 

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};

  给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法。

注意:

 
 
(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 }



 

转载于:https://www.cnblogs.com/xdl745464047/p/4003765.html

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值