有一动态数组a,和某一地址p
a:array of sometype;
p:pinteger;现在要a的首地址指向p
实现 @a[0]:=p;
a:array of sometype;
p:pinteger;现在要a的首地址指向p
实现 @a[0]:=p;
解决方案 »
- 呵呵,简单问题可是没有资料查找,来问兄弟们了,快来啊
- 初看<<Inside VCL>>的两个疑惑
- 编译时出错!
- Delphi 中如何打开 CorelDraw 的图片(*.cdr)),有什么控件吗?
- 动态添加菜单问题(在线等待)
- SW_SHOWNORMAL是由那个单元文件提供的?
- 菜鸟问题:如何在右键打开PopupMenu前,自动用左键选中item
- delphi+access读取数据的简单问题,来者有分
- 走人,散功,要分的朋友请进//qiubolecn(来自差生市)
- 如何在DBGRID中处理Paradox logical fields
- 怎么在客户端的TClientDataSet问题
- 请问谁有delphi2009分享一下?
p := addr(a[0]);
a指向p是不行的,但可以复制p指向的内容到a
应当是可以的相当于c中的
a=p吧?
动态数组是按照引用计数去管理其分配的内存的,他不是一个简单的指针变量,Delphi在处理动态数组的时候,在编译你的代码时,是会插入很多辅助代码的,因此不要轻易改变指向动态数组的变量的值。
如果你想实现数组的方式访问你动态开辟的内存,你可以采用
type
SomeType = Integer;
TSomeAry = array[0..1023] of sometype;
PSomeAry = ^TSomeAry;procedure TForm1.Button1Click(Sender: TObject);
var
a: PSomeAry;
p: PInteger;
begin
//先为P分配空间
p := GetMemory(1024 * SizeOf(Integer)); a := PSomeAry(P);
a^[0] := 100;
a^[1] := 120;
showMessage(IntToStr(p^));
showMessage(IntToStr(PInteger(Integer(p) + 4)^));
FreeMem(p);
end;上面是一个简单的例子,可以让你动态分配的空间按照数组的方式去逐个访问