C语言NO.6

小case:在写数组前补充函数中的一点,函数可以嵌套调用,但是不能嵌套定义(即函数的内部不能定义函数)。C语言函数的定义都是相互平行的、相互独立的。

数组

首先,数组数组,顾名思义就是很多数据的组合。数组是真正意义上的存储数据的结构。虽然前面学习的变量也能存储数据,但变 量所能存储的数据很有限。不仅如此,数组和指针是相辅相成的,学习数组可以为学习指针打 下基础。

那么这些数据有没有什么要求呢,是不是不管什么 数据组合在一起都是数组呢?同一数组中存储的数必须满足以下两个条件:
1. 这些数据的类型必须相同。
2. 这些数据在内存中必须是连续存储的。
换句话说,数组是在内存中连续存储的具有相同类型的一组数据的集合。
一维数组的创建
类型说明符 数组名 [ 常量 || 表达式 ];
eg:long long int arr[5]
它表示定义了一个长整型数组,数组名为 a ,定义的数组称为数组 a 。数组名 a 除了表示该数组之外,还表示 该数组的首地址
此时数组 a 中有 5 个元素,每个元素都是long long int 型变量,而且它们在内存中的地址是连续分配的。 这里的元素就是变量的意思,数组中习惯上称为元素。
在定义数组时,需要指定数组中元素的个数。方括号中的常量表达式就是用来指定元素的个数。数组中元素 的个数又称数组的长度。
数组中既然有多个元素,那么如何区分这些元素呢?方法是通过给每个元素进行编号。数组元素的编号又叫 下标。
数组中的下标是从 0 开始的(而不是 1 )。那么,如何通过下标表示每个数组元素的呢?通过 数组名 [ 下标 ]” 的方式。例如“int a[5];” 表示定义了有 5 个元素的数组 a ,这 5 个元素分别为 a[0] a[1] a[2] a[3] a[4]
其中 a[0] a[1] a[2] a[3] a[4] 分别表示这 5 个元素的变量名。
为什么下标是从 0 开始而不是从 1 开始呢?试想,如果从 1 开始,那么数组的第 5 个元素就是 a[5] ,而定义数组时是 int a[5] ,两个都是 a[5] 就容易产生混淆。而下标从 0 开始就不存在这个问题了!所以定义一个数 组 a[n] ,那么这个数组中元素最大的下标是 n–1 ;而元素 a[i] 表示数组 a 中第 i+1 个元素。
另外,方括号中的常量表达式可以是 数字常量表达式 ,也可以是 符号常量表达式 。但不管是什么表达式, 必须是常量,绝对不能是变量。通常情况下 C 语言不允许对数组的长度进行动态定义,换句话说,数组的大 小不依赖程序运行过程中变量的值。非通常的情况为动态内存分配,此种情况下数组的长度就可以动态定义。
一维数组初始化
1> 定义数组时给所有元素赋初值,这叫 完全初始化
eg:int arr[2]={1,2};
通过将数组元素的初值依次放在一对花括号中,如此初始化之后, a[0]=1 a[1]=2 即从左到右依次赋给每个元素。需要注意的是,初始化时各元素间是用逗号隔开的,不是用分号。
2> 可以只给一部分元素赋值,这叫 不完全初始化
eg:int[6]={6};
不完全初始化时,没有被初始化的元素自动为 0
也不能写成 “int a[5]={} ”。如果大括号中什么都不写,那就是极其严重的语法错误。大括号中最少要写一个数, 这时就是给数组 清零 ,此时数组中每个元素都是零。此外,如果定义的数组的
长度比花括号中所提供的初值的个数少,也是语法错误,如 “a[2]={1 2 3 4 5}
注意:字符数组的初始化方式比较丰富 :
运行结果:
由于这里我是用‘%s'打印,所以98自动转换为了相应的ASCII码b。
3> 如果定义数组时就给数组中所有元素赋初值,那么就可以不指定数组的长度,因为此时元素的个数已经确定了。编程时我们经常都会使用这种写法,因为方便,既不会出问题,也不用自己计算有几个元素,系统会自动分配空间。
这章概念性东西比较多,数组就是这样。下一节开始数组的使用,使用数组多半都是要遍历数组的,自己多敲代码,锻炼手感和思维。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值