大家肯定对数组已经不陌生了,都见到过数组,比如arr[10] = {1,2,3,4,5,6,7,8,9,10};
装的是整数。那么下面我们讲会系统的讲一下 一维数组的知识点。(针对数值型数组)
首先我们需要了解什么是数组?
1.数组的创建
1.1数组的概念:一组相同类型的元素的集合。
1.2数组的创建方式
type_t name [const_n] type_t //数组的元素类型 name // 数组名字 const_n //数组的大小,长度
例如
int arr[10]; char ch[10]; float arr2[5]; double arr3[7];
以上就是对数组进行创建的方式。
上面数组的大小都是常量,那我们可不可以这样写?
int n = 10; int arr[n];
数组创建,在C99标准之前, [] 中要给一个常量才可以,不能使用变量。在C99标准支持了变长数组的概念,数组的大小可以使用变量指定,但是数组不能初始化。
1.2 数组的初始化
数组的初始化是指在创建数组的同时给数组的内容一些合理初始值。
int arr[10] = {1,2,3,4}; int arr2[] = {1,2,3}; int arr3[5] = {1,2,3,4,5}; char arr4[3] = {'a',98,'c'}; char arr5[] = {'a','b','c'}; char arr6[] = "abcdef";
我相信大家看到这里肯定会有疑问
第一个数组是10个长度,我们却初始化4个元素,那后六个元素是什么,还是不存在?
第二个数组没有定义长度,那他的大小是什么?
我们可以通过程序运行一下
我们可以看到这里数组的长度还是10,数组元素初始化的部分是1 2 3 4,没有初始化的部分是0;
我们再来看第二个程序
这里我们没有在数组里定义他的大小,直接初始化元素,这时候数组长度为3,元素为1 2 3.
由此我们可以得到这样的一个结论
当数组创建时,定义了长度多长,数组的长度就是多长,当我们一旦初始化数组元素,未初始化的元素默认为0;但是当我们没有初始化数组,数组元素为随机值。
如果我们没有定义长度,那么我们初始化的元素个数就是数组的长度。
(大家可以自行测试一下)
1.3数组的引用
关于数组的引用需要注意的一点:
只能引用数组的某一元素,不能一次整体调用数组的全部元素。
1.3.1下标引用操作符 []
我们引用数组的时候需要用到下标引用操作符 []
我们要知道数组的下标是从0开始的
比如 这个数组有五个元素,那么第一个元素要引用出来就是arr[0],以此类推,所以我们要找哪个元素就去找其对应的下标就行。
int arr[5] = {1,2,3,4,5} // 0 1 2 3 4 int a = arr[0];
大家肯定有这个疑问,我们在定义数组的 [] 和引用元素的 [] 是一样的吗?
很显然不是
int arr[10]; 这个是定义数组,所以[]表示的是数组元素的个数;
a = arr[5]; 这个是引用数组元素,表示的是引用arr数组中下标为5的元素。
他们俩的最大区别就是有无数据类型。
1.4一维数组在内存中的存储
我们现在了解了数组的创建,初始化和引用。那么数组在内存中是怎样存储的呢?数组每个元素的地址是怎样变化的呢?
看下图
我们可以看到数组的五个元素在内存中的地址是逐渐增加4的
我们这里只需要知道数组在内存中是连续存放的,并且随着数组下标的增大,地址也有规律的变大。
关于sizeof()和strlen我们会专门在一期博客给大家解答。