社区
Delphi
帖子详情
送分题:初始化数组
okyzx
2007-04-22 03:07:49
我有一个动态数组Ball长度共 4531
现在要给他分配不同的数据值,例如下数据,A1,A2,A3,A4,A5分别存放1、10、20、500、1000
3000
请问用语句如何实现初始化下面的值 ,谢谢
1 个 1
10 个 2
20 个 3
500 个 4
1000 个 5
3000 个6
...全文
201
10
打赏
收藏
送分题:初始化数组
我有一个动态数组Ball长度共 4531 现在要给他分配不同的数据值,例如下数据,A1,A2,A3,A4,A5分别存放1、10、20、500、1000 3000 请问用语句如何实现初始化下面的值 ,谢谢 1 个 1 10 个 2 20 个 3 500 个 4 1000 个 5 3000 个6
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
okyzx
2007-04-22
打赏
举报
回复
谢谢楼上的
lihuasoft
2007-04-22
打赏
举报
回复
是的,就是在说全局对象。局部对象也是一样的道理。
lihuasoft
2007-04-22
打赏
举报
回复
关于“动态数组元素是不是在内存中连续存放的”:
动态数组和动态字符串的管理机制是一样的,就是叫做“Copy On Write”的技术。这方面我理解得不深,只能简要地表达一下我的看法:
动态字符串对象和动态数组对象都在起始指针偏移-8个字节处放置一个叫做“引用计数”的4字节integer数据。以string为例:
当S := DateTimeToStr(Now);
然后,S2 := S; 时,S的引用计数加1,此时,S2与S指向同样的堆空间。
当S2 := 'abcd' + S; 时,系统重新给S2分配堆空间,并把'abcd'和S的内容拷贝过去,S的引用计数减1。
下面用代码演示动态数组的地址变化:
var
A : array of byte;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Add(Format('%p',[A]));//未设定长度时,系统并未给A分配堆内存
SetLength(A, 100);
Memo1.Lines.Add(Format('%p',[A]));
SetLength(A, 1000);
Memo1.Lines.Add(Format('%p',[A]));
SetLength(A, 10000000);
Memo1.Lines.Add(Format('%p',[A]));
SetLength(A, 12345678);
Memo1.Lines.Add(Format('%p',[A]));
end;
可以看出,每次改变长度,数组的起始地址都有变化,也就是说,数组被“拷贝”了。
理解不对之处,不要笑话。总之我认为动态数组元素在内存中是连续排放的。(并且,如果不是连续存放的,那么每个元素的地址在哪里标记?)
okyzx
2007-04-22
打赏
举报
回复
to楼上:
全局的动态数据也是么?
lihuasoft
2007-04-22
打赏
举报
回复
数组在内存中是连续存放的
okyzx
2007-04-22
打赏
举报
回复
我这个Ball动态数组是全局的,会不会出现内存不连续用,FillChar填充出问题的情况?
lihuasoft
2007-04-22
打赏
举报
回复
var
Ball : array of byte;//动态数组
A1,A2,A3,A4,A5,A6 : integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
A1:=1; A2:=10; A3:=20; A4:=500; A5:=1000; A6:=3000;
SetLength(Ball,A1+A2+A3+A4+A5+A6);//长度
FillChar(Ball[Low(Ball)],A1,1);
FillChar(Ball[Low(Ball)+A1],A2,2);
FillChar(Ball[Low(Ball)+A1+A2],A3,3);
FillChar(Ball[Low(Ball)+A1+A2+A3],A4,4);
FillChar(Ball[Low(Ball)+A1+A2+A3+A4],A5,5);
FillChar(Ball[Low(Ball)+A1+A2+A3+A4+A5],A6,6);
end;
若论API,CopyMemory似乎还不如FillMemory呢。其实是一样的思路。
lihuasoft
2007-04-22
打赏
举报
回复
动态数组的内存不一定连续吧
应该是连续的。
superyys
2007-04-22
打赏
举报
回复
动态数组的内存不一定连续吧?还是用for语句一个一个赋值比较保险吧
可以low和high得到数据的下标和上标,遂个赋值不是难事!
如果不是动态数据Ball : array[1..4531] of byte;,可以用fillchar,StringOfChar,DupeStriing,CopyMemory,一大把函数可以用了,CopyMemory应该是最快的,API吗
lihuasoft
2007-04-22
打赏
举报
回复
var
Ball : array[1..4531] of byte;
A1,A2,A3,A4,A5,A6 : integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
A1:=1; A2:=10; A3:=20; A4:=500; A5:=1000; A6:=3000;
FillChar(Ball[Low(Ball)],A1,1);
FillChar(Ball[Low(Ball)+A1],A2,2);
FillChar(Ball[Low(Ball)+A1+A2],A3,3);
FillChar(Ball[Low(Ball)+A1+A2+A3],A4,4);
FillChar(Ball[Low(Ball)+A1+A2+A3+A4],A5,5);
FillChar(Ball[Low(Ball)+A1+A2+A3+A4+A5],A6,6);
end;
《C语言基础》 之 第8章
数组
课程内容:
数组
的声明、定义(
初始化
)、
数组
的赋值、
数组
在内存中的空间特点、使用 [ ] 访问
数组
元素、
数组
元素的指针、
数组
第一个元素指针的表示方法、
数组
命令与++、sizeof与
数组
、
数组
名总结、函数普通传参回顾...
程序设计与算法(三)第01周测验004:神秘的
数组
初始化
程序设计与算法(三)第01周测验004:神秘的
数组
初始化
本文是中国大学MOOC,北京大学程序设计与算法(三)C++面向对象程序设计第一周测验。 总时间限制: 1000ms 内存限制: 65536kB 描述 填空,使得程序输出...
004:神秘的
数组
初始化
004:神秘的
数组
初始化
题面 描述 填空,使得程序输出指定结果 #include <iostream> using namespace std; int main() { int * a[] = { // 在此处补充你的代码 }; *a[2] = 123; a[3][5] = 456; if(! a[0...
java
初始化
数组
_java如何实现
数组
初始化
java实现
数组
初始化
的方法:1、动态
初始化
,格式...java实现
数组
初始化
的方法:1、静态
初始化
2、动态
初始化
格式:1、动态
初始化
格式:数据类型 [ ]
数组
名称 = new 数据类型[
数组
长度]2、静态
初始化
格式:数据类型 [...
C语言基础:
数组
(声明
数组
、
初始化
数组
、访问
数组
元素)
数组
(声明
数组
、
初始化
数组
、访问
数组
元素)
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章