动态数组和静态数组的一点疑问
var
a:array of byte;
b:array[1..max] of byte;
...
initialize;
setlength(a,max);
赋值[1,2,3,4,5。。]
我想知道的是,a/b在内存中的具体位置排列是怎么样的
例如b在内存中应该是连续的长度为max bytes的,每个单元的大小是byte.
b是指向这段内存的开始。
而a呢?
问题点数:100、回复次数:13Top
1 楼Fuxiao(X老师)回复于 2002-04-09 19:05:59 得分 10
我认为a像一个没有初始化的指针一样,等调用setlength时,再分配空间。
有点道理吗?
个人观点。Top
2 楼qiubolecn(来自差生市)回复于 2002-04-09 19:10:44 得分 10
A也是相同的道理,一般情况下,是分配连续的地址空间
op中数组名与c中数组名使用不一样;Top
3 楼suvi()回复于 2002-04-09 19:22:41 得分 10
a在没有调用setlength前是一个没有意义的指针地址,不能用的,会出错的。
setlength后,op会给他在栈里找一个空间,连续的max值,这是就和一个静态的b很象了。Top
4 楼cooling(cooling)回复于 2002-04-09 19:28:31 得分 10
那我为动态数组分配了空间后,经过一些操作后,又改变了动态数组的长度,这时候怎样呢?Top
5 楼zsr(老牛)回复于 2002-04-09 19:31:57 得分 10
重新分配空间并拷贝值.Top
6 楼amiao(新湖居士)回复于 2002-04-09 19:34:49 得分 0
:)Top
7 楼csdnhuang(巫师诗人)回复于 2002-04-09 19:56:06 得分 0
setlength()
好象不太安全Top
8 楼melice(melice)回复于 2002-04-10 01:43:53 得分 0
昏昏··这样说吧,我在使用copymemory函数的时候,发现对动态数组和静态数组得出来的东西是不一样的···Top
9 楼johnmack(爱若琴弦)回复于 2002-04-10 09:03:31 得分 0
A 在没有分配空间前不能用Top
10 楼suvi()回复于 2002-04-10 09:27:51 得分 20
静态数组的copymemory(a)可以得到内容,动态数组就不可以了,但是可以用copymemory(b^),时刻记住b是一个指针而已Top
11 楼melice(melice)回复于 2002-04-12 01:58:56 得分 0
to suvi, 动态数组我们在setlength后,她的长度数值是存放在哪里的呢?说起来,就算是静态数组,她的长度又是存放在哪里的呢?Top
12 楼outer2000(天外流星)回复于 2002-04-12 07:55:33 得分 10
setlength告诉操作系统,我需要这么大的空间,你给我吧?
操作系统说:好的,我给你开了房间。。。Top
13 楼Cipherliu(孤鹰)回复于 2002-04-12 10:12:01 得分 20
静态数组的内存地址是连续的,动态数组未必。
当多次用setlength为动态数组分配空间时,其中各元素的地址一般都不连续。Top




