7、数组
到目前为止,我们已经学习了C语言的基本数据类型:整形、浮点型、字符型。再往后就是复合数据类型。

**所谓复合数据类型,是指由简单数据类型,经过一定的数据结构封装,组成而成的新的数据类型。譬如数组、譬如结构体、譬如公用体


文章目录

  • 7.1、为什么需要数组?
  • 7.2、怎么定义数组?
  • 7.3、怎么使用数组?
  • 7.4、数组的初始化问题
  • 7.5、不同数据类型数组
  • 7.6、sizeof运算符
  • 7.7、字符数组及它的两种初始化


7.1、为什么需要数组?

数组就是数组成一个组,数就是一个特定数据类型的变量,组就是说好多数放在了一起。

C语言数组对应Python里的什么 c语言中的数组_算法

7.2、怎么定义数组?

int a[4]; 数组中元素类型 数组名[数组元素个数];

总结:数组中的所有元素必须是**同一种数据类型,不可能在一个数组中存储两种数据类型的数。

7.3、怎么使用数组?

数组定义的时候作为整体定义。但是使用的时候不能作为整体使用,使用时必须拆开使用数组中的各个元素。
譬如数组int a[4],使用其中的四个元素,分别用a[0]
。。。。a[3],

其中[]是数组的标志,[]中的数字叫做数组下标(index,索引),下标是我们访问数组中各个元素的指引。 下标是0代表数组中第一个元素,下标是1代表数组第二个元素。如果数组长度为n,下标中最后一个是n-1。
访问数组时要特别注意下标,下标是从0开始的,如果下标超出了n-1,会产生**越界访问,结果是不可预期的。

7.4、数组的初始化问题

初始化(initinalize,简写为init),是为了让对象有一个预定的初始状态。

譬如说:

(1)简单变量的初始化

当一个局部变量定义时没有初始化,它的值是随机的。

这个如果没有注意,可能会导致程序出错。怎么办?

解决方案有两个:

**第一个,在定义过后明确给它赋值,使用=运算符。

第二个,定义该变量时,同时进行初始化。

C语言数组对应Python里的什么 c语言中的数组_c语言_02

总结:

1、一般来讲,只要你记得显示赋值,则两种方式并无优劣差异。但是人会犯错,会不小心,所以还是定义同时初始化好一点,因为这个定义的时候就有了固定值,即使之后忘记显示赋值也不会造成结果是随机的。

2、一般情况下,定义的同时都将变量初始化为0。**局部变量定义同时初始化为0,这是一个写代码好习惯。无特别要求时这样做

C语言数组对应Python里的什么 c语言中的数组_数组_03

(2)数组的初始化

第一种:完全初始化。依次赋值

第二种:不完全初始化。初始化式中的值从a[0]开始,依次向后赋值,不足的默认用0填充赋值

C语言数组对应Python里的什么 c语言中的数组_C语言数组对应Python里的什么_04

一个{};都是0

C语言数组对应Python里的什么 c语言中的数组_c语言_05

无初始化:变量随机

C语言数组对应Python里的什么 c语言中的数组_c语言_06

前面不管,只指定一个初始化:

![[Pasted image 20220811225130.png]]
![[Pasted image 20220811225001.png]]

错误:

C语言数组对应Python里的什么 c语言中的数组_算法_07

只指定第一个和最后面一个:

C语言数组对应Python里的什么 c语言中的数组_数据结构_08

7.5、不同数据类型数组

int a[5];			// 整形数组
float a[5];			// 浮点型数组
double a[5];		// 双精度浮点型数组
char a[5];			// 字符数组

程序在环境中运行时,需要一定的资源支持。这些资源包括:CPU(运算能力)、内存等,这些资源一般由运行时环境(一般是操作系统)来提供,譬如我们在linux系统上./a.out运行程序时,linux系统为我们提供了运算能力和内存。

程序越庞大,运行时消耗的资源越多。譬如内存占用,越大的程序,占用的内存越多。占用内存的其中之一,就是我们在程序中定义的变量。

C语言程序中,变量的实质就是内存中的一个格子。当我们定义(创造一个变量)了一个变量后,就相当于在内存中得到了一个格子,这个格子的名字就是变量名,以后访问这个内存格子(地址)就使用该变量名就行了。这就是变量的本质。!

C语言数组对应Python里的什么 c语言中的数组_算法_09

数据类型的实质是内存中格子的不同种类。譬如在32位机器上
短整形格子(short) 占用2字节空间 16位
整形格子(类型是int)、 占用4字节空间 32位
单精度浮点型格子(float)、 占用4字节空间
双精度浮点型格子(double)、 占用8字节空间 64位
字符型格子(char)。 占用1字节空间 8位

二进制:
二进制位:
字节:等于8个二进制位

7.6、sizeof运算符

作用:返回一个变量或者一个数据类型的内存占用长度,以字节为单位。

sizeof(a)/sizeof(a[0]) 测试一个数组中究竟有多少个元素

C语言数组对应Python里的什么 c语言中的数组_算法_10

7.7、字符数组及它的两种初始化

char a[5];

基础知识:
1、在C语言中引用一个单个字符时,应该用**单引号’‘括起来,譬如’a’。

2、定义数组同时初始化,则可以省略数组定义时[]中的长度。
C语言编译器会自动推论其长度,推论依据是初始化式中初始化元素的个数。由此可知,**省略[]中数组元素个数只有一种情况,那就是后面的初始化式必须为完全初始化。

3、在C语言中引用**一个字符串时,应该用"“括起来,譬如"abcde”

**"abcde"实际上有6个字符,分别是’a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘\0’

C语言数组对应Python里的什么 c语言中的数组_c语言_11

‘\0’ 这个字符是ASCII码表中的第一个字符,它的编码值是0,对应的字符是空字符(不可见字符,在屏幕上看不见,没法显示,一般要用转义字符方式来显示。譬如’\n’表示回车符,‘\t’表示Tab,’\0’代表空字符)

**‘\0’是C语言中定义的字符串的结尾标志。所以,当c语言程序中使用"abcde"这种方式去初始化时,编译器会自动在字符’e’后面添加一个’\0’。于是乎变成了6个字符。

C语言数组对应Python里的什么 c语言中的数组_数据结构_12


C语言数组对应Python里的什么 c语言中的数组_算法_13