数组与结构体

前言

先考虑这样的问题:当你被要求定义十个变量时,你会怎么办?可以像 a1,a2,a3··· 这样一个一个的定义出来。但是,当你被要求定义一千个,一万个变量的时候呢?肯定就不能一个一个定义了,这时候,我们就要用到 数组 了。

数组的理解

数组,可以看作是把很多变量 起来,统一一下名字,再重新编个号,这样只需要知道它的名字和编号就可以访问这个变量了。

一、数组的定义

数组的定义方式为:int 变量名[数组大小];,例 int a[b];

其中,b 应该是已知的整数,当 b 比较大时,就应该定义全局变量了,因为局部变量不能定义太大(暂时不讲为什么)。

容易看出,数组是有范围的,以 int a[b]; 为例,其下标的范围是 \([\,0,b\,)\),也就是一个左闭右开的区间。

二、数组调用

数组越界:当下标超出数组的范围时,就会发生数组越界,会发生一些玄学错误。所以,在调用数组时一定要看看是否越界。

三、单独的变量与数组的对比

一般情况下,变量的定义像是下面这样的,比较分散。

int a1,b2,a2,c,d;

\[\require{AMScd} \begin{CD} \qquad a1 @.b2 \\ @. @. \\ a2 @. @. c\\ @.\\ @.d\\ \end{CD} \]

当我们调用时,需要用 a1,b2 这样的语句。
现在我们把它们“串”起来,统一名字并编号,就会变成这样。

int a[5];

\[\require{AMScd} \begin{CD} a[\,0\,] @= a[\,1\,] @= a[\,2\,] @= a[\,3\,] @= a[\,4\,] \end{CD} \]

当我们访问数组时,就可以用 a[0],a[1] 这样的语句来调用数组,是不是方便了很多。另外,这也为循环结构提供了一个意义,就是遍历数组。

四、多维数组

上面所讲的是一维数组,类似的,我们可以把单个变量看作是零维数组,那么一维数组就是由很多个零维数组组成的。类比过来,二维数组就是由很多个一维数组组成\(\ \cdots\)

好,相信你已经能够理解数组了。

结构体

一、结构体的定义

结构体可以看作自己定义一种新的数据类型,里面存储一些自己定义的变量,称为成员元素。

定义方式:

struct 名字{
	一些内容,可以是变量,可以是函数。
};

不要忘记最后的 ;

下面是一个例子:

struct tree{
	int l,r;
	int sum;
	void upd(){
		sum++;
	}
}a[10],c;
tree c[10];

在这个例子中,定义了一个名为 tree 的结构体,其中有四个成员,l,rsum 都为 int 类型,upd()void 类型的函数。

tree 此时已经可以看作一种新的数据类型,可以定义变量和数组,定义函数等。

当我们要声明类型为 tree 的变量时,有两种方式。
一是在结构体最后的 }; 之间声明,如上例中的 a[10]c
二是像声明其它数据类型一样通过 tree 变量名; 来声明,如例子中的 b[10]

二、结构体的调用

当我们想要访问结构体的成员元素时,需要用到 . 来实现。

调用方式:变量名.成员元素名

例:a[1].l=1;,c.sum++;

三、结构体的意义

对于初学者,结构体的作用可能不会立即显现出来,但当你以后接触一些数据结构时,使用结构体可以帮助你理解一个节点有哪些变量,而且可以减少变量名的冲突。

end

posted @ 2022-10-23 10:52  杨杨与玉玉  阅读(211)  评论(0)    收藏  举报