请帮帮忙,几个极弱的关于Delphi的基础小问题

lop5712 2004-04-26 12:25:59
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自己来实现记数了?

最后问下变量定义一定得放在代码的开头吗?
...全文
22 16 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dickeybird888 2004-04-26
(·¥·)
  • 打赏
  • 举报
回复
Cipherliu 2004-04-26
or语句里指定的记数参数,是否不能在循环体里修改?即
for index := 0 to count do
begin
Dec( index );
end;
循环变量是不能改变的.
  • 打赏
  • 举报
回复
Cipherliu 2004-04-26
变量定义一定要写在开头的.在Var后面
  • 打赏
  • 举报
回复
Cipherliu 2004-04-26
Delphi里有没有C++中的引用这种类型?
函数参数可以用 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;
  • 打赏
  • 举报
回复
ImFool 2004-04-26
1、具体需要什么链表不清楚,最好还是自己用指针、纪录实现吧;
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;

  • 打赏
  • 举报
回复
hzyood 2004-04-26
局部变量定义一定要放在代码开头var后面
  • 打赏
  • 举报
回复
ImFool 2004-04-26
RamjetZhang(王小桃):“VCL库在数据结构方面”绝对不“弱”!、、、、、、

lop5712 (LOP) :其实,Delphi的强制类型转换确实就是什么都没做(对目标代码来说),只是在源代码级让表达式符合表达式或函数的参数类型要求而已(因为Delphi是强类型检查的,比如,C中char字符可以直接赋值给byte类型,在Delphi中这就要“转换”)。
  • 打赏
  • 举报
回复
lop5712 2004-04-26
虽然还不是很清楚如何使用TList来存储Longword,但类型转换解决了,非常感谢各位的回答!!结帖
  • 打赏
  • 举报
回复
RamjetZhang 2004-04-26
楼主: long(12.3)当然没法转,大小都不一样,跟c是不同的哲学;
要转就得trunc or round;
TList是用指针来存储数据的,或者说存的仅仅是对象的指针而已;用它来实现longword的存储,太浪费(至于直接将指针强制转型为longword,或可一试);
但Tlist没记错的话,内部实现机制就是个array;就数组本身的特性而言跟链表比,插入、删除性能似乎并不理想;
VCL库在数据结构方面是比较弱,去找点free的库吧,好比SDL;要不就照着数据结构的书抄吧;
  • 打赏
  • 举报
回复
Cipherliu 2004-04-26
整数除用 div
i:=MAXLENGTH div 3;
  • 打赏
  • 举报
回复
broook 2004-04-26
i := MAXLENGTH / 3;
delphi会自动将longword格式转为Extended
用Trunc 可以将其去尾返回整数值
用Round 则四舍五入返回整数值
  • 打赏
  • 举报
回复
lop5712 2004-04-26
真的请帮帮忙,我也知道这写问题很弱,可是它就是出错啊!!
上面的总说类型不适合,那我要怎么才能进行整数除法啊??

还有就是
i := Longword( 12.3 );
竟然是错的????说无效的类型转换!那类型转换有什么用?难道就只是进行类对象指针的继承转换???难道要使用数学函数来进行?如果是,能不能说一下是什么函数?我急用的。

To Cipherliu(孤鹰):
多谢你的回答,其实我之前都不知道原来^表示指针及取地址的:)。但是Delphi提供的类库的功能就那么差吗?我只是想要一个以Longword为元素的链表而已啊,不是这么惨吧!!
你说的记录指针也太夸张了,整个存储空间增加了一倍啊,而且好多多余的操作(如取地址内容)。我并没有要求使用TList的,如果你知道有哪个链表类可以满足我的要求,能否说明一下。

To ImFool(搞技术的都是傻瓜):
Inc(Longword(m_List.Items[1]));这个没效果啊?它总是报错,说无效的类型转换。
而“Pointer与Longword可以强制转换,只是要注意一个问题,0与nil(出现零值时可能会中断一些处理);”中怎么进行强制转换,我上面只是浮点变整数而已它都不准,能否麻烦给个简易的代码?

抱歉上面的问题很弱,我急着要将一段VC代码转成Delphi,今天才开始了解Delphi的,多谢各位帮忙。
  • 打赏
  • 举报
回复
lop5712 2004-04-26
非常感谢各位的回答,多谢!!
最后再问个小问题就完了,如何类型转换啊?
const MAXLENGTH : Longword = 100;
var i : Longword;
然后我
i := MAXLENGTH / 3;
它报错。
还有就是如何将Extended类型的转成Longword类型的?
  • 打赏
  • 举报
回复
liyu001xj 2004-04-26
同意上述说法
  • 打赏
  • 举报
回复
ADWARDS00 2004-04-26
补充一下
全局变量放在
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;
  • 打赏
  • 举报
回复
ADWARDS00 2004-04-26
for index := 0 to count do
begin
Dec( index );
end;
你用了for的话这个index是自己增长的,可以用do while来变向实现
tLIST里面的是存放数据的指针的,如果你一定要放数据,你可以用tstringlist试试,但这是个字符串队列,不知道能不能符合你的要求
  • 打赏
  • 举报
回复
相关推荐
发帖
Delphi
加入

5074

社区成员

Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
申请成为版主
帖子事件
创建了帖子
2004-04-26 12:25
社区公告
暂无公告