快捷搜索:  汽车  科技

c语言数组使用方法总结(一文掌握C语言数组使用)

c语言数组使用方法总结(一文掌握C语言数组使用)数组类型 数组名[数组大小]3、数组定义语法2、数组的特点(1)数组是一种引用类型数据,存放在内存中。(2)数组当中存放多个数据(元素),类型必须统一。(如果定义的是int类型,那么里面的所有元素都必须是int类型)(3)数组的长度在运行当中不允许改变。(定义的数组元素个数在运行的过程当中不允许改变)

最近有不少同学询问大雄有关数组的相关问题,相信学过C语言的同学都知道数组的重要性,今天就来给大家分享一下它的使用方法,干货较多,建议收藏观看哦。

一、数组

1、数组的基本概念

数组:类型相同的数据元素的集合,是C语言中的一种构造数据类型,这些元素会顺序地储存在内存的某段区域。


2、数组的特点
(1)数组是一种引用类型数据,存放在内存中。
(2)数组当中存放多个数据(元素),类型必须统一。

(如果定义的是int类型,那么里面的所有元素都必须是int类型)
(3)数组的长度在运行当中不允许改变。

(定义的数组元素个数在运行的过程当中不允许改变)

3、数组定义语法

数组类型 数组名[数组大小]

(1)数组大小:决定了数组中能够存放的元素数量。

(2)数组大小不能是变量,只能是字面值或字面值表达式。

(3)C语言编译器要求在编译期间就需要确定数组的内存大小。

(4)数组大小必须是大于0的正整数。

二、一维数组

1、一维数组的创建和初始化

(1)一维数组的创建

数组的创建方式:

c语言数组使用方法总结(一文掌握C语言数组使用)(1)

数组创建的实例:

c语言数组使用方法总结(一文掌握C语言数组使用)(2)

注:数组创建, [] 中要给一个常量才可以,不能使用变量。可以直接用常量,或者使用宏定义。

(2)一维数组的初始化

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。

1)全部初始化

c语言数组使用方法总结(一文掌握C语言数组使用)(3)

初始化列表:用大括号括起来的,用于对数组进行初始化的一个值的列表,每个值之间通过逗号隔开。

初始化列表只能在定义数组时使用,数组定义完成后不能再使用初始化列表给数组赋值。

全部初始化要求初始化列表中各元素个数必须与数组大小相同。

2)部分元素附初值

c语言数组使用方法总结(一文掌握C语言数组使用)(4)

实际开发中,通常采用部分元素赋初值的方法对数组元素进行初始化,如:int arr[100]={0};

3)省略长度赋初值

c语言数组使用方法总结(一文掌握C语言数组使用)(5)

定义数组时,如果后面跟有初始化列表,并且初始化列表中的值的个数就是预期的数组大小,则可省略括号中的数组大小。

4)在内存中的存储

c语言数组使用方法总结(一文掌握C语言数组使用)(6)

2、一维数组的使用

[ ] ,下标引用操作符。它其实就数组访问的操作符。我们来看代码:

c语言数组使用方法总结(一文掌握C语言数组使用)(7)

注意:

(1)sizeof()操作符用于取长度,以字节为单位。sizeof(数组名)即求的时整个数组的大小。sizeof(首元素)即求数组单个元素大小。用0下标,是因为数组至少存在一个有效元素,所以0下标永远存在

(2)数组是使用下标来访问的,下标是从0开始。

(3)数组的大小可以通过计算得到。建议采用sizeof(arr)/sizeof(arr[0])这种方式。

3、一维数组在内存中的存储

看代码:

c语言数组使用方法总结(一文掌握C语言数组使用)(8)

输出结果如下:

c语言数组使用方法总结(一文掌握C语言数组使用)(9)

仔细观察输出的结果,可知随着数组下标的增长,元素的地址,也在有规律的递增。

由此可以得出结论:数组在内存中是连续存放的。

c语言数组使用方法总结(一文掌握C语言数组使用)(10)

总结:

(1)数组在内存中开辟是线性连续且递增的。

(2)在c语言中,任何变量(基本变量,指针变量,结构体变量,数组变量)的空间都是整体开辟,但任何元素的起始地址一定是开辟字节当中最小的。

三、二维数组

1、二维数组的创建和初始化

(1)二维数组的创建

c语言数组使用方法总结(一文掌握C语言数组使用)(11)

二维数组创建时,行数可以忽略不写。并且所有维度的数组其第一个方括号的内容可忽略。

(2)二维数组的初始化

1)全部初始化

c语言数组使用方法总结(一文掌握C语言数组使用)(12)

顺序全部赋初值

c语言数组使用方法总结(一文掌握C语言数组使用)(13)

2)部分初始化

按行部分赋初值

c语言数组使用方法总结(一文掌握C语言数组使用)(14)

顺序部分赋初值

c语言数组使用方法总结(一文掌握C语言数组使用)(15)

3)省略长度初始化

可省略长度,不可省略列数。

按行:

c语言数组使用方法总结(一文掌握C语言数组使用)(16)

按列:

c语言数组使用方法总结(一文掌握C语言数组使用)(17)

2、二维数组的使用

二维数组的使用也是通过下标的方式,用双重循环嵌套进行索引使用。看代码:

c语言数组使用方法总结(一文掌握C语言数组使用)(18)

3、二维数组在内存中的存储

像一维数组一样,这里我们尝试打印二维数组的每个元素。

c语言数组使用方法总结(一文掌握C语言数组使用)(19)

输出结果为:

c语言数组使用方法总结(一文掌握C语言数组使用)(20)

通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。

c语言数组使用方法总结(一文掌握C语言数组使用)(21)

总结:

(1)二维数组在内存的空间布局上,也是线性连续且递增的。

(2)二维数组本质上也是一维数组,只不过内部元素放的是一维数组。

四、数组作为函数参数

①调用函数传参数组时,减少函数传数组时的成本问题(时间和空间)。因为传参时,需要临时拷贝,如果数组过大,可能会浪费资源,严重的话可能栈溢出。

②数组元素降维成指向数组内部元素类型的指针。

③对指针加一,加上所指向的类型的大小。

1、一维数组

看代码:

c语言数组使用方法总结(一文掌握C语言数组使用)(22)

c语言数组使用方法总结(一文掌握C语言数组使用)(23)

画图解析:

c语言数组使用方法总结(一文掌握C语言数组使用)(24)

c语言数组使用方法总结(一文掌握C语言数组使用)(25)

c语言数组使用方法总结(一文掌握C语言数组使用)(26)

总结:

(1)形参格式,例如int arr[ ]或者int *arr,两者等价。

(2)形参元素个数可被忽略,并且建议忽略(有可能改变了实参的大小,这样比较方便)。或者也可以填写比实参元素个数大的值。

(3)用sizeof()求数组元素个数时,尽量在数组定义时求。因为传参后数组会降维成指针。

2、二维数组

前面说了数组元素降维成指向数组内部元素类型的指针,二维int整型数组的内部元素不再是int整型,而是具有四个整型的一维数组。


对指针加一,加上所指向的类型的大小。对二维数组的指针加一,加上的值为内部一维数组的大小。
看代码:

c语言数组使用方法总结(一文掌握C语言数组使用)(27)

画图解析:

c语言数组使用方法总结(一文掌握C语言数组使用)(28)

c语言数组使用方法总结(一文掌握C语言数组使用)(29)

形参格式,例如:int arr[][4]或者int (*arr)[4],这里为指向具有四个整型元素的一维数组的数组指针。

除了第一个中括号里的数字可以省,后面的中括号的内容不能省略,因为下标是数组类型的一部分,省略掉就不明确其类型。

注意:

看待所有的数组时,都将它看作一维数组,只不过其内部元素不一样,例如:三维数组其内部元素为二维数组,而二维数组也是由一维数组组成,都是线性连续且相等的

五、数组指针和指针数组

①数组指针:是指针,指向数组。例:int (*arr)[10]

②指针数组:是数组,数组内容存放的是指针。例:int *arr[10]

然后,需要明确一个优先级顺序:()>[]>*

所以:

(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针;

*p[n]:根据优先级,先看[],则p是一个数组,再结合*,这个数组的元素是指针类型,共n个元素,这是“指针的数组”,即指针数组。

1、指针数组

看代码:

c语言数组使用方法总结(一文掌握C语言数组使用)(30)

输出结果:

c语言数组使用方法总结(一文掌握C语言数组使用)(31)

首先,对于语句int*p[4],因为[ ]的优先级要比*要高,所以 p 先与[ ]结合,构成一个数组的定义,数组名为 p,而int*修饰的是数组的内容,即数组的每个元素。

也就是说,该数组包含 4 个指向int类型数据的指针,如图所示,因此,它是一个指针数组。

c语言数组使用方法总结(一文掌握C语言数组使用)(32)

2、数组指针

看代码:

c语言数组使用方法总结(一文掌握C语言数组使用)(33)

结果为:

c语言数组使用方法总结(一文掌握C语言数组使用)(34)

其次,对于语句int(*arr)[4],“( )”的优先级比[ ]高,*号和 arr 构成一个指针的定义,指针变量名为arr,而int 修饰的是数组的内容,即数组的每个元素。

也就是说,arr 是一个指针,它指向一个包含 4 个int类型数据的数组,如图 所示。很显然,它是一个数组指针。

c语言数组使用方法总结(一文掌握C语言数组使用)(35)

分享到这里就结束了,希望能够给你带来帮助,如果有想要了解学习的内容也可以私信或者留言,说不定哪天就等来了呢~

猜您喜欢: