【Array】数组

目录

什么是数组?

​编辑 产生来源  

举例

特点

结构形式

栈内存

堆内存

区别

限制 

代码

拜了个拜~ 


什么是数组?

数组是存储于一个连续空间且具有相同数据类型的元素集合。 [8]若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 [1]这些有序排列的同类数据元素的集合称为数组。


数组是用于储存多个相同类型数据的集合。

它只能存放相同的数据,项目的编号就是下标,从0开始:

int a[n个项目-1];
        ↑ 这个a就是:
【元素(存的东西),元素,元素...元素】
      第0项      第一项 第二项 第n-1项

 

 
产生来源  

在C语言中, 数组 [2]属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组指针数组、结构数组等各种类别。

关于可变长数组(VLA)的问题:原来的C89标准中是不允许可变长数组出现的,但是在C99标准中,加入了对VLA的支持 [3],但是支持的编译器不多,而且由于栈溢出安全问题,没有太多的人敢用这个可变长数组,所以在C11标准中又把它规定为可选实现的功能了 [4]。

如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序,因为可以利用索引值设计一个循环,高效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。因为 Visual Basic对每一个索引值都分配空间,所以不要不切实际声明一个太大的数组。

此处数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的 Index 属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。

一个数组中的所有元素具有相同的数据类型(在C、C++、Javapascal中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、字符串、数值等等)。可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量。

如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。

compact变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。

原型可以这样写(假设数组的元素是type):

1int compact(type *Array,int Count)

数组类型说明 在C语言中使用数组必须先进行类型说明。

数组说明的一般形式为:类型说明符 数组名 [常量表达式],……; 其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符方括号中的常量表达式表示数据元素的个数,也称为数组的长度。

数组就是一次性定义相同数据类型的一组变量数组定义。

举例

说明整型数组a,有10个元素。若要表示第10个元素,则使用a[9]。第一个则是a[0]。

1int a[10];

说明实型数组b,有10个元素,实型数组c,有20个元素。

1float b[10],c[20];

说明字符数组ch,有20个元素。

1char ch[20];

特点

1.数组是相同数据类型的元素的集合。

2.数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。

3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。

对于VB的数组,表示数组元素时应注意:

1下标要紧跟在数组名后,而且用圆括号括起来(不能用其他括号)。

2下标可以是常量,变量,或表达式,但其值必须是整数(如果是小数将四舍五入为整数)。

3下标必须为一段连续的整数,其最小值成为下界,其最大值成为上界。不加说明时下界值默认为1。

 

结构形式

栈内存

在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配,当在一段代码中定义一个变量时,java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,java会自动释放掉为该变量所分配的内存空间。


堆内存

堆内存用来存放由new运算符创建的对象和数组,在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理。在堆中创建了一个数组或对象后,同时还在栈内存中定义一个特殊的变量。让栈内存中的这个变量的取值等于数组或者对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量实际上保存的是数组或对象在堆内存中的地址(也称为对象的句柄),以后就可以在程序中使用栈的引用变量来访问堆中的数组或对象。 [5]


区别

与结构或类中的字段的区别

数组中的所有元素都具有相同类型(这一点和结构或类中的字段不同,它们可以是不同类型)。数组中的元素存储在一个连续性的内存块中,并通过索引来访问(这一点也和结构和类中的字段不同,它们通过名称来访问)。 [1]

限制 

如果设n的数组项目有10个,那么查找n的第11项,会显示数组越界,因为只有10个项目,这第11个项目哪里来的。有些人偏偏不信邪,自己去试吧~

代码

#include <iostream>
using namespace std;
int main(){
    int a[10]
    a[9]=1;
    cout<<a[9];
}

因为此次文章没有题目,这只是个示范,示范了定义a数组有11个项目,把第9项设为1,再输出第就项,答案是1。 

拜了个拜~ 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值