两个数组变量共享内存地址的问题---------献出我的最后105分(105)

  • 主题发起人 主题发起人 冰力不足
  • 开始时间 开始时间

冰力不足

Unregistered / Unconfirmed
GUEST, unregistred user!
type Pmm := ^Tmm; Tmm = Packed Record; yy: integer; nn: integer; gg: Array [0..8] of Double; end;//--------------------------var y: Tmm;implementation.....//-----------------------------现在 在一函数内要用到这个gg数组var jj: Array [0..8] of Double; // Absolute y.gg;由于delphi在指针方面实在束手,怎么让 jj 与 y.gg 的内存共享jj: Array [0..8] of Double Absolute y.gg; // 这样编译不通过jj: Array [0..8] of Double Absolute y; // 这样编译通过 但这不是我要的 因为类里面还有其他成员怎么办? Absolute 应该怎么写?
 
来自:关门放狗, 时间:2009-8-3 13:04:28, ID:3970424[:D]-----------------[:D] ? 难 : 容易;
 
1. Delphi使用指针没有任何问题;2. 变量之间的内存, 少用为好, 其实真的没有必要用; //因为既然是地址, 任何地方可以引用的;3. 共享内存的办法有很多的, 楼主的要求可以考虑这样实现:type gg_type = array[0..8] of double; gg_p = ^gg_type;type Pmm = ^Tmm; Tmm = Packed Record yy: integer; nn: integer; gg: Array [0..8] of Double; end;//--------------------------var y: Tmm;var //jj : Array [0..8] of Double; // Absolute y.gg; jj_p : gg_p;procedure TForm1.Button1Click(Sender: TObject);begin jj_p := gg_p(@(y.gg)); y.gg [1] := 1.23; showmessage(floattostr(jj_p[1])); y.gg [1] := 3.21; showmessage(floattostr(jj_p[1]));end;
 
谢谢 新世纪.我整理了一下unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TDAry9 = array[0..8] of Double; PDAry9 = ^TDAry9;type Pmm = ^Tmm; Tmm = Packed Record yy: integer; nn: integer; gg: Array [0..8] of Double; end;type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; y: Tmm; jj : PDAry9;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin jj := PDAry9(@(y.gg)); y.gg[1] := 1.23; Memo1.Lines.Add(format('%p %p %f', [@(y.gg), @jj[1], jj[1]])); y.gg [1] := 3.21; Memo1.Lines.Add(format('%p %p %f', [@(y.gg), @jj[1], jj[1]]));end;end.运行结果:00452BDC 00452BE4 1.2300452BDC 00452BE4 3.21值是跟着变, 但是地址不一样.虽然如此, 已经很感谢您指点了.不过, 能不能再完美一点? 让它们地址都一样? 因为我翻译一C代码, 如果按照这样的翻译, 必须改动很多.
 
P: Cardinal;P := Cardinal(@(y.gg)); 看来你是想要这个, 用的时候:PDAry9(P)...
 
来自:smlabc, 时间:2009-8-3 15:17:44, ID:3970454P: Cardinal;P := Cardinal(@(y.gg)); 看来你是想要这个, 用的时候:PDAry9(P)... //===========================谢谢!Cardinal 是无符号类型不是很明白...要怎么做?
 
你那地址比较的代码有点小问题: jj数组下标应该从[0]开始
 
来自:新世纪, 时间:2009-8-3 15:35:58, ID:3970460你那地址比较的代码有点小问题: jj数组下标应该从[0]开始 =========================================================谢谢! 原来是疏忽了.大侠可否留下QQ 以后可以向您请教?
 
接受答案了.
 
后退
顶部