数组问题(100分)

  • 主题发起人 主题发起人 Kule
  • 开始时间 开始时间
K

Kule

Unregistered / Unconfirmed
GUEST, unregistred user!
var date:array [0..255] of byte;
date1:array of byte;
reg:Tregistry;
.
.
.
setlength(date1,100);
Reg.ReadBinaryData('DefaultConnectionSettings',date,sizeof(date));//可以通过
Reg.ReadBinaryData('DefaultConnectionSettings',date1,sizeof(date1));//报告非法的数据类型

难道date河date1的类型不一样马?

 
在reg 前date1 赋值了吗?
 
给date1分配内存了吗?
 
两者的类型当然不同,一个是静态数组,一个是动态数组。
 
呵呵,你可以这样
showmessage(inttostr(sizeof(date)))
showmessage(inttostr(sizeof(date1)))
就知道是怎么回事了。静态数组的大小是一开始就定的,动态的是
一个指针。
 
我尝试过lczhuohuo的方法,sizeof(date)=255 而 sizeof(date1)=4 ,这是为什么?
另外,cat.yy的意思是什么?,我不是已经setlength过了吗?
我的问题是,date和date1我定义的都是byte型的,可为什么静态的可是读出数据,而动态的
提示我类型不对.这应该与动静态无关把,望高手解答

 
老弟:
你这段代码一点问题都没有.
你不是搞恶作剧吧.

 
Pascal语言规定:如果几个变量被同一个类型标识符说明,或者由已被定义为等价的类型
标识符说明,那么这些变量的类型是同一的。类型同一,即是同一个类型。类型同一的变量
可以在要求最严的场合使用。
按照上面的规定,data和data1并非同一类型,所以,在某些场合会出问题。
具体的语法,可以参看一本Pascal语言的书。
 
绝对不一样,静态数组和动态数组差别很大,而且PASCAL语言规则规定下列的数组也不是同
一个数组:
var
s:array of string;
a:array of string;
尽管他们是同一个类型的动态数组,但是却不能等同使用,也就是说程序不能将他们互相直接
赋值。如
s:=a;//非法
 
D5 的帮助里说的:
Pass a variable reference to SizeOf to determine the number of bytes used
to represent the variable. Pass a type identifier to SizeOf to determine
the number of bytes used to represent instances of that type.
所以我的理解是:
>>>>date:array [0..255] of byte
这里的 date 是个变量,所以 sizeof 返回它内容
占用的字节数;
>>>>date1:array of byte
这里的 date1 是个 type identifier,sizeof 返回代表
该类型的实例的那个标识符所占的字节数,该标识符大小固定,所以不管是
array of byte 还是 array of integer/word/dword/char,它总返回 4。
 
同意Crab的说法.事实上就是动态数组使用SizeOf()为4,一个指针
 
Kule:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.htm
 
多人接受答案了。
 
后退
顶部