Delphi里有没有C++中的引用这种类型?我想使用链表,找了半天找到一个TList类,不知这个类是否可以用做链表?如果可以,但是找到的资料上说它的元素类型是Pointer,可是我希望元素是Longword类型的,应该怎么办啊?还有如果使用TList,能不能将里面的元素转成Longword?即能否如下书写?
Inc( m_List.Items[1] as Longword );
实际中它总是报错,那又如何才能转换过来?for语句里指定的记数参数,是否不能在循环体里修改?即
for index := 0 to count do
begin
Dec( index );
end;
上面的Dec( index );就总是报错,那是否就只能用while自己来实现记数了?最后问下变量定义一定得放在代码的开头吗?
Inc( m_List.Items[1] as Longword );
实际中它总是报错,那又如何才能转换过来?for语句里指定的记数参数,是否不能在循环体里修改?即
for index := 0 to count do
begin
Dec( index );
end;
上面的Dec( index );就总是报错,那是否就只能用while自己来实现记数了?最后问下变量定义一定得放在代码的开头吗?
解决方案 »
- quickreport预览可以看到的qrlabel,打印是空白的?
- ado的大 部分连接字符串的写法(来自codeproject)http://www.codeproject.com/database/connectionstrings.asp
- 弄过围棋算法的朋友请进
- 如何将dll中的窗体嵌入到主form中的panel中?
- 一个小孩的心里话
- 在SQL SERVER2000中运行通过。。如何将@path 到DELPHI中的变量里来,用ADOQUERY?
- SOS!求助,关于网址屏蔽如何实现?
- 问题解决就给分,DBIMAGE组件为什么不能装入图片
- delphi程序如何打包,如何得到release而非debug的.exe文件
- 这个问题应该不算难把
- 上机日志的导出问题?~~帮忙啊,帮忙~
- 怎样在两个listview间移动某一条Tlistitem
2、Pointer与Longword可以强制转换,只是要注意一个问题,0与nil(出现零值时可能会中断一些处理);
3、Inc(Longword(m_List.Items[1]));
4、Delphi不允许在for循环中修改循环控制变量,可这永远也不会是什么缺陷啊,不用for(用while 或repeat)或使用另外的变量不就行了。例:
for i := 0 to count do
begin
index := i;
Dec( index );
end;
函数参数可以用 Var 我想使用链表,找了半天找到一个TList类,不知这个类是否可以用做链表?如果可以,但是找到的资料上说它的元素类型是Pointer,可是我希望元素是Longword类型的,应该怎么办啊?
TList是链表,但它是一个指针链表,如果你希望元素是Longword类型的,那应该声明一个指向Longword的指针类型,用new创始它,然后把元素填进去,再保存到链表里还有如果使用TList,能不能将里面的元素转成Longword?即能否如下书写?
Inc( m_List.Items[1] as Longword );
实际中它总是报错,那又如何才能转换过来?这样做肯定不行,参考这样写
type
PLongWord=^LongWord;var
plw:PLongWord;
begin
new(plw);
plw^:=11;
m_List.add(plw);
m_List[1]^:=12;
//现在plw^的值也成12了.
end;
for index := 0 to count do
begin
Dec( index );
end;
循环变量是不能改变的.
begin
Dec( index );
end;
你用了for的话这个index是自己增长的,可以用do while来变向实现
tLIST里面的是存放数据的指针的,如果你一定要放数据,你可以用tstringlist试试,但这是个字符串队列,不知道能不能符合你的要求
全局变量放在
var
Form1: TForm1;
userid:string='019';
username:string='aaa';
implementation(这个上面的var里面)
局部变量放在
function TForm1.cxbh(mc, tablename, fieldname, fname: string): string;
var
str:string;//放在函数的begin上面,用var声明
begin
end;
最后再问个小问题就完了,如何类型转换啊?
const MAXLENGTH : Longword = 100;
var i : Longword;
然后我
i := MAXLENGTH / 3;
它报错。
还有就是如何将Extended类型的转成Longword类型的?
上面的总说类型不适合,那我要怎么才能进行整数除法啊??还有就是
i := Longword( 12.3 );
竟然是错的????说无效的类型转换!那类型转换有什么用?难道就只是进行类对象指针的继承转换???难道要使用数学函数来进行?如果是,能不能说一下是什么函数?我急用的。To Cipherliu(孤鹰):
多谢你的回答,其实我之前都不知道原来^表示指针及取地址的:)。但是Delphi提供的类库的功能就那么差吗?我只是想要一个以Longword为元素的链表而已啊,不是这么惨吧!!
你说的记录指针也太夸张了,整个存储空间增加了一倍啊,而且好多多余的操作(如取地址内容)。我并没有要求使用TList的,如果你知道有哪个链表类可以满足我的要求,能否说明一下。To ImFool(搞技术的都是傻瓜):
Inc(Longword(m_List.Items[1]));这个没效果啊?它总是报错,说无效的类型转换。
而“Pointer与Longword可以强制转换,只是要注意一个问题,0与nil(出现零值时可能会中断一些处理);”中怎么进行强制转换,我上面只是浮点变整数而已它都不准,能否麻烦给个简易的代码? 抱歉上面的问题很弱,我急着要将一段VC代码转成Delphi,今天才开始了解Delphi的,多谢各位帮忙。
delphi会自动将longword格式转为Extended
用Trunc 可以将其去尾返回整数值
用Round 则四舍五入返回整数值
i:=MAXLENGTH div 3;
要转就得trunc or round;
TList是用指针来存储数据的,或者说存的仅仅是对象的指针而已;用它来实现longword的存储,太浪费(至于直接将指针强制转型为longword,或可一试);
但Tlist没记错的话,内部实现机制就是个array;就数组本身的特性而言跟链表比,插入、删除性能似乎并不理想;
VCL库在数据结构方面是比较弱,去找点free的库吧,好比SDL;要不就照着数据结构的书抄吧;