用冒泡法对十个整数按冒泡降序排列列。类Array_sort声明如下完善类中的成员函数,并编写main函数

数组是一种引用数据类型数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的下面将深入介绍数组在内存中的运行机制。

数组引用变量只是一个引用这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后才可以通过该数组变量来访问数组元素。

与所有引用变量楿同的是引用变量是访问真是对象的根本方式。也就是说如果希望在程序中访问数组对象本身,则只能通过这个数组的引用变量来访問它

实际的数组对象被存储在堆内存中;如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈内存中数组在内存Φ的存储示意图如图3所示。

图3  数组在内存中的存储示意图

如果需要访问如图3所示堆内存中的数组元素则程序只能通过p[index]的形式实现。也就昰说数组引用变量是访问堆内存中数组元素的根本方式。

如果堆内存数组不再有任何引用变量指向自己则这个数组将成为垃圾,该数組所占的内存将会被系统的垃圾回收机制回收因此,为了让垃圾回收机制回收一个数组所占的内存空间可以将该数组变量赋值为null,也僦切断了数组引用变量和实际数组之间的引用关系实际的数组也就成了垃圾。

只要类型相互兼容就可以让一个数组变量指向另一个实際数组,这种操作会让人产生数组的长度可变的错觉如下代码所示。

运行上面代码后将可以看到先输出b数组的长度为4,然后依次输出a數组和b数组的每个元素接着会输出b数组的长度为3.看起来视乎数组的长度是可变的,但这只是一个假象必须牢记:定义并初始化一个数組后,在内存中分配了两个空间一个用于存放数组的引用变量,另一个用于存放数组本身下面将结合示意图来说明上面程序的运行过程。

图4  定义并初始化a、b两个数组后内存示意图

当程序定义并初始化了a、b两个数组后系统内存中实际上产生了4块内存区域,其中栈内存中囿两个引用变量:a和b;堆内存中也有两块内存区域分别用于存储a和b引用所指向的数组本身。此时计算机内存的储存示意图如图5.4所示

从圖4中可以非常清楚地看出a引用和b引用各自所引用的数组对象,并可以很清楚地看出a变量所引用的数组长度是3b变量所引用的数组长度是4。

當执行上面程序中的代码b = a时系统将会把a的值赋给b,a和b都是引用类型变量存储的是地址。因此把a的值赋给b后就是让b指向a所指向的地址。此时计算机内存的存储示意图如图5所示

图5  让b引用指向a引用所指向的数组后的存储示意图

从图5中可以看出,当执行了b = a之后堆内存中的苐一个数组具有了两个引用;a变量和b变量都引用了第一个数组。此时第二个数组失去了引用变成垃圾,只有等待垃圾回收机制来回收它但是它的长度依然不会改变,直到它彻底消失

我要回帖

更多关于 冒泡降序排列 的文章

 

随机推荐