程序片断如下:
1 var
2 p:^integer;
3 q:^integer;
4 begin
5 getmem(p,sizeof(integer)*10);
6 q:=p;
7 end;编译无法通过,提示第6行错,错误信息:imcompatible types,我想把q指向刚分配过的内存空间,为何不能通过 q:=p这样的语句进行赋值呢?
1 var
2 p:^integer;
3 q:^integer;
4 begin
5 getmem(p,sizeof(integer)*10);
6 q:=p;
7 end;编译无法通过,提示第6行错,错误信息:imcompatible types,我想把q指向刚分配过的内存空间,为何不能通过 q:=p这样的语句进行赋值呢?
解决方案 »
- 如何在注册表中添加一个新的主键
- DELphi7 如何实现按一个快捷键就复制当前对象到剪贴板?
- 选择Delphi方向,还是选择C#方向,给小弟指个路。刚刚学习Delphi,但感觉现在公司用C#或JAVA方面的多。谢谢!
- 关于触发器的问题
- 限制输入问题
- 我想新建一个不带表单的公共单元存储公共变量和函数,但interface到imtepmnet之间不会写请指教
- 如何把數據表的第2行第一列里的值賦給變量tmp
- 如何列出本机的目录结构
- 关于死锁的问题,我给你高分
- 如何从两个时间段里统计出员工平时工作时间,周末加班时间,法定假日加班时间?
- 如何得到ado控件與哪個表關連?也就是得到ado控件的表!
- 我想做一个倒计时的表,请大家帮忙!!!!!!
2 q,p:^integer;
3
4 begin
5 getmem(p,sizeof(integer)*10);
6 q:=p;
7 end;就可以了
delphi 不认为是一样的;
要这样
type
pint=^integer;
var
q:pint;
p:pint;
begin
//
end;
也可以。
MAX_DIAGONAL = $FFFFFF;type
PDiagVectorArray = ^TDiagVectorArray;
TDiagVectorArray = array [-MAX_DIAGONAL .. +MAX_DIAGONAL] of integer;
PIntArray = ^TIntArray;
TIntArray = array[1..(MAXINT div sizeof(integer))] of integer;...
...
...func1(MAXD:Integer);
var
IntArr_f, IntArr_b: PIntArray;
diagVecB,diagVecF: PDiagVectorArray;
bgin
GetMem(IntArr_f, sizeof(integer)*(MaxD*2+1));
GetMem(IntArr_b,sizeof(integer)*(MaxD*2+1)); pchar(diagVecF) := pchar(IntArr_f) - sizeof(integer)*(MAX_DIAGONAL-MaxD);
pchar(diagVecB) := pchar(IntArr_b) - sizeof(integer)*(MAX_DIAGONAL-MaxD); ...
...
end;再后面程序diagVecF就可以通过数组下标存取数据了,比如diagVecF[i] := x; 偶实在想不通,diagVecF,diagVecB并没有为其分配空间嘛,虽说IntArr_f和IntArr_b分配了空间,但
pchar(diagVecF) := pchar(IntArr_f) - sizeof(integer)*(MAX_DIAGONAL-MaxD);这个语句什么意思将diagVecF指针指向???区域,sizeof(integer)*(MAX_DIAGONAL-MaxD)肯定是一个很大的数(MaxD很小,比如说3),pchar(IntArr_f) - sizeof(integer)*(MAX_DIAGONAL-MaxD)是一个什么结果啊?
diagVecF经过这样赋值居然还可以diagVecF[i] := x?! 郁闷,实在难解。请教请教