delphi数组如何初始化?

tomorrow93 2012-06-06 11:25:33
C语言是int a[5]={1,2,3,4,5};
那delphi是怎样的?
...全文
3913 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
OSReact 2012-08-26
  • 打赏
  • 举报
回复
什么样的内容什么样的回复都有。
弘石 2012-06-08
  • 打赏
  • 举报
回复
cdchq 2012-06-07
  • 打赏
  • 举报
回复
静态常量数组可以在定义时直接初始化
const A1: array[0..2] of Integer = (0,1,2);

非常量数组只能先定义,再给每个元素赋值
var A1: array[0..100] of Integer;
begin
A1[0]:=0;
{...}
A1[100]:=100;
end;
这个不得不说是Delphi很不方便的一个地方。
s11ss 2012-06-07
  • 打赏
  • 举报
回复
To 1L, 2L:
全局数组可以直接初始化,局部的不行。
var
b: array[0..2] of Byte = (0,1,2);
鐵蛋 2012-06-07
  • 打赏
  • 举报
回复
kaikai_kk解释的很全面
seagull327 2012-06-07
  • 打赏
  • 举报
回复
var
A: array[1..5] of Integer;
i: integer;
begin
for i := 1 to 5 do
A[i] := i;
end;
cdchq 2012-06-07
  • 打赏
  • 举报
回复
应该这样
procedure TForm1.Button1Click(Sender: TObject);
const
A: array[0..4] of Integer = (1,2,3,4,5);
var
......
begin
......
end;
s11ss 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
procedure TForm1.Button1Click(Sender: TObject);
var
const A: array[0..4] of Integer = (1,2,3,4,5);
begin

end;

个位大牛,请问这哪错了?运行不了
错误信息:[Error] Unit1.pas(28): Identifier expected but 'CONST' fo……
[/Quote]去掉var!!!
看那山瞧那水 2012-06-07
  • 打赏
  • 举报
回复
哈哈,这个这个……LZ

DELPHI里没有var和const结合的变量或常量

procedure TForm1.Button1Click(Sender: TObject);
const
A: array[0..4] of Integer = (1,2,3,4,5);
var
b:Integer;
...
begin

end;
tomorrow93 2012-06-07
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
const A: array[0..4] of Integer = (1,2,3,4,5);
begin

end;

个位大牛,请问这哪错了?运行不了
错误信息:[Error] Unit1.pas(28): Identifier expected but 'CONST' found
kaikai_kk 2012-06-06
  • 打赏
  • 举报
回复
静态数组直接初始化(后面不能再更改):
const A: array[0..4] of Integer = (1,2,3,4,5);

静态数组定义后再赋值
var A: array[0..4] of Integer;
begin
A[0]:=1;
{...}
A[4]:=5;
end;

动态数组:
var A: array of Integer;
begin
SetLength(A,5);
A[0]:=1;
{...}
A[4]:=5;
end;
Inprise/Borland公司的Delphi可能是当前最好的Windows快速应用程序开发工具。 随着它在Linux平台上的版本Kylix的发布,它在Unix世界的前景也十分看好。Delphi完 全支持COM、ActiveX、可视化组件库(VCL),并提供了可扩展、可定制的快速应用程 序开发环境。本书是这种功能强大的开发工具的全面参考。 本书从简介Delphi Pascal并讨论Delphi对象模型开始,讨论了运行时类型信息 (RTTI)——Delphi开发环境的关键部分,这一点在Delphi的其他正式帮助文档中很 少论及。本书还用一章的篇幅讨论了Delphi中的并发编程,以及多线程应用程序的创建。 本书的主要内容是Delphi语言以字母顺序排列的完整参考。每项参考的内容都包括: 语法,使用标准编码惯例 说明参数列表,如果函数或过程包括参数的话提示和技巧—— 在实际程序中使用某个组件的实用信息一个简单的例子其他相关关键字的交叉参考本书 秉承“坚果”(In a Nutshell系列技术手册的一贯风格。不管你对Delphi的掌握程度如何, 本书都是你日常工作中不可或缺的标准参考指南。阅读本书,你将领略到Delphi的精华所在, 还可以解决实际编程中可能遇到的问题。 第一章 Delphi Pascal 单元 程序 库 包 数据类型 变量和常量 异常处理 文件1/O 函数和过程 第二章 Delphi对象模型 类和对象 接口 引用计算 消息 内存管理 旧式的对象类型 第三章 运行时类型信息 虚方法表 公布的声明 .TypInfo单元 虚方法和动态方法 初始化和结束化 自动的方法 接口 探究RTTI 第四章 并发编程 线程和进程 TThread类 BeginThread和EndThread函数 线程局部存储 进程 未来化 第五章 语言参考 第六章 系统常量 Variant类型码 开放数组类型 虚方法表偏移值 运行时错误代码 第七章 运算符 一元运算符 多元运算符 附加运算符 比较运算符 第八章 编译器指示字 附录一 命令行工具 附录二 SysUtils单元 词汇表 多谢支持【Think you to your download~】
Delphi中制作DLL •一 Dll的制作一般分为以下几步: 1 在一个DLL工程里写一个过程或函数 2 写一个Exports关键字,在其下写过程的名称。不用写参数和调用后缀。 二参数传递 1 参数类型最好与window C++的参数类型一致。不要用DELPHI的数据类型。 2 最好有返回值[即使是一个过程],来报出调用成功或失败,或状态。成功或失败的返回值最好为1[成功]或0[失败].一句话,与windows c++兼容。 3 用stdcall声明后缀。 4 最好大小写敏感。 5 无须用far调用后缀,那只是为了与windows 16位程序兼容。 三 DLL的初始化和退出清理[如果需要初始化和退出清理] 1 DLLProc[SysUtils单元的一个Pointer]是DLL的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回调函数]。如下: procedure DllEnterPoint(dwReason: DWORD);far;stdcall; dwReason参数有四种类型: DLL_PROCESS_ATTACH:进程进入时 DLL_PROCESS_DETACH进程退出时 DLL_THREAD_ATTACH 线程进入时 DLL_THREAD_DETACH 线程退出时 在初始化部分写: DLLProc := @DLLEnterPoint; DllEnterPoint(DLL_PROCESS_ATTACH); 2 如Form上有TdcomConnection组件,就Uses Activex,在初始化时写一句CoInitialize (nil); 3 在退出时一定保证DcomConnection.Connected := False,并且数据集已关闭。否则报地址错。 四全局变量的使用 在widnows 32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份, 但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据 传递,除非你用内存映像文件。 五、其他:调用方式按照标准的Windows调用方式. 六、关于参数传递 •Delphi程序之间调用DLL,如果要用String类型的话,要在引用的单元加上ShareMem 单元。 •如果Delphi写的DLL供其他开发工具使用的话,不要使用String类型,用PAnsiChar类型。 尽量使用标准DLL接口。指的是传递的参数类型及函数返回类型不能是Delphi特有的, 比如string(AnsiString),以及动态数组和含有这些类型成员的复合类型(如记录),也不 能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。如果使用了string类型或 动态数组类型,且调用方不是Delphi程序,则基本上会报错。如果调用方是Delphi但调用方或 被调用方没有在工程文件的第一包含单元不是ShareMem,也可能会出错。 七、关于回调Funciton 你可以把Callback函数看作是一种特殊的消息响应函数,一般来说我们不会自己调用这种函数, 而是有某些系统函数调用,而且不需要向后传递消息。 只要象C/C++这样支持函数指针的语言都 有回调函数的概念,它实际上是向被调用函数传一个你的函数地址,然后被调用函数向通过你传 入的函数地址来调用你的函数 。 以上是结构化回调,到高级语言Object Pascal、C++中回调函数并没有退出,反而得到延伸与 扩展,在面向对像中的回调,其实是指面向对像中类对像的事件,事件就是原始的回调函数。面 向对像, 将回调函数定义成事件过程,在程序引用对像时,若指定了对像的过程事件后,那么在 要进行事件触发的地方检查事件过程是否分配,如果分中的就执行事,也就是执行了回调函数。
delphi产生随机数2009-07-27 18:58//用delphi产生不重复的随机数 ****************************************************************************************** var aa : array[1..36] of string[2]; //aa数组为需要随机排列的数组,{先把1..36按顺序给aa数组赋值} procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin for i:=1 to 36 do begin aa[i]:=inttostr(i); bb[i]:=inttostr(i); end; end; {随机进行排列} procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; swapa:string[2]; begin randomize; //随机数初始化*一定要有,不然下次运行时候产生的随机数仍然和这次相同* for i:=1 to 36 do begin j:=1+random(36); swapa:=aa[i]; aa[i]:=aa[j]; aa[j]:=swapa; end; //由此得到不重复的随机排列数字 ***************************************************************************************** 如何产生34-456之间的随机数 Randomize; 34+Random(456-34+1); ×××××××××××××××××××//下面是扫雷游戏的一个编法 procedure TForm1.Button1Click(Sender:TObject); begin Randomize; Memo1.Lines.Add(IntToStr(Random(20))); end; ×××××××××××× ***************************************************************************************** 随机数相关的几个函数: 1、RandSeed;//随时机数发生的“种子”。如果不赋值那么每次执行产生的随机数列是一样的。 所以该值必须每次调用均应是不同值。 2、Randomize;//用当前机器时间作为“种子”初始化随机数发生器。 3、Random() ;//由“种子”初始化的随机数出发,开始产生随机数序列 但是Delphi中的Random()产生的是伪随机数,也就是说,程序的两次运行,Random()产生的随机数是一样的。 先运行一下Randomize,再Random就是真正的随机数了 即: Randomize //初始化随机数发生器 Random() ********************************************************************************************* delphi 如何产生不重复随机数 pascal里的随机数 随机数是指理论上没有规律可循、在指定范围内每个数的出现几率相等、无法根据之前的数来预测下一个数的数列。一般随机数生成器的基本原理是:首先初始化一个随机种子,其初始值可以是任意的整数;在每次获取随机数时,以随机种子为基础进行某种特殊的运算,获得一个随机数并返回之,然后再对随机种子进行某种运算,改变随机种子的值。这样,就可以生成许多比较随机的数,但同一个初始值的随机种子将会生成完全相同的随机数列。 Pascal的System单元提供了两个与随机数有关的子程序:Randomize和Random。 Randomize过程用于初始化随机种子,其初始值取决于当前的系统时钟。 Random函数用于获取随机数 它有两种调用形式: Random,返回一个0到1之间(不包括1)的随机实数; Random(N),返回0至N之间(不包括N)的随机整数,N为Word类型整数。 另外,System单元中随机种子变量的标识符为RandSeed,你也可以手动修改它。随机数在信息学奥林匹克中可用于随机化搜索、穷举等算法,以优化其性能,也可用于在快速排序中选择关键数,以使其快速排序算法的最坏情况没有固定的相应数列。如果你希望使用了随机数的程序对同一个输入数据能有恒定的输出结果,可以设置RandSeed为一个定值。 ************************************************************************************************* 一个变态小算法 ******************************* 比较耗费机时,如果产生的数目少,就不要用这个算法了。 计算的是在一个范围内(如1-1000),随机抽取n个不相等的随机数。我的思想就是先定义一个用来存放的数组(这当然是必须的啦,废话),然后定义了一个二维数组(感觉很浪费空间),这个二维数组是用来存放已经生成随机数的范围,当然不是随意存放了,要按照自然顺序,但这还不必要定义二维的。二维主要是存放一个范围,即某一列的第一行存放的是范围的小值,而第二行存放的是范围的大值。这样新生成的随机数肯定是在范围之外的,因为范围是已生成随机数的范围啊。这样,每次取随机数时,先随机抽取在某两个范围数组值之间,再在这两个范围数组值之间取随机数。基本上就是这样了。 public class random { int count=500; //个数 int min=1; //最小值 int max=1000; //最大值 int[] r=new int[count]; //随机数存储数组 int[][] k=new int[2][count+2]; //存储范围数组,用于判断范围值 //一维数组用来存放范围的小值,二维用来存放大值 int l=0; //存储空间大小 public random() //初始化范围 {k[0][0]=min-1; k[1][0]=min-1; k[0][2]=max+1; k[1][2]=max+1; l=3; } public int ran(){ //来一个可以制造随机整数的东西 return (int)(Math.random()*1000000000); } public void p(int x,int c) //用来比较存储数组 { for(int i=0;i数组是按自然顺序存储的 //如果生成的随机数与当前值的偏差为1,与当前值合并 if(k[0][i]-x==1){ k[0][i]=x; if (k[0][i]-k[1][i-1]==1) //如果与前一个范围值的最大值的值差为1与前一个值合并 {k[1][i-1]=k[1][i]; move(l-1,i); l--;} break;} //如果与但前范围值差大于1 else{ for(int j=l;j>i;j--){ //后移数组为插入值留个位置 k[0][j]=k[0][j-1]; k[1][j]=k[1][j-1]; } k[0][i]=x; //插入值 k[1][i]=x; l++; if (k[0][i]-k[1][i-1]==1) //如果插入值与前一个范围值相差1,则与前一个值合并 {k[1][i-1]=k[1][i]; move(l-1,i); l--;} break; }} } } public void move(int m,int n) //与前一个范围值合并的函数 { for(int j=n;j2) z=ran()%(l-2); //判断有多少个空隙,就是有多少个范围,然后随机选取一个 else z=0; r[i]=ran2(k[0][z+1],k[1][z]); //在选取的范围中制造随机数 p(r[i],i); } } public int ran2(int x,int y){ //在固定范围内制造随机数 int m=x-y; m=ran()%(m-1); return m+y+1; } /*public static void main(String[] args) { random rr=new random(); rr.r(); for(int i=0;i

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧