代码大致内容:
type
   TDBRecord=record
     id:integer;
     name:string;
     age:integer;
   end;
   PDBRecord=^TDBRecord;
type
  ......function ConnectDBandGetDBcontent(HostIp,UserName:String):Pointer;
var
 SQLConnection: TSQLConnection;
 SQLQuery:TSQLQuery;
 Count,i:integer;
 ArrDBRecord:Array of PDBRecord;
begin
 SQLConnection  :=TSQLConnection.Create(nil);
 SQLQuery:=TSQLQuery.Create(nil);
 ...
 ...
  while not SQLQuery.Eof do
           begin
             new(ArrDBRecord[i]);
             ArrDBRecord[i]^.id :=SQLQuery.Fields.Fields[0].AsInteger ;
             ArrDBRecord[i]^.name:=SQLQuery.Fields.Fields[1].AsString ;
             ArrDBRecord[i]^.age:=SQLQuery.Fields.Fields[2].AsInteger ;
             dispose(ArrDBRecord[i]);
             SQLQuery.Next ;
             Inc(i);
           end;
          Result:= @ArrDBRecord;
        end;目的:我现在是想把数据库中的数据存到一个指针数组,数组中的各个指针分别指向结构体,函数的   返回值为指针。
问题1:Result:= @ArrDBRecord 返回的是数组的首地址,还是数组中每一个元素的地址?
问题2:如何引用数组中指针指向结构体的内容?

解决方案 »

  1.   

    1、首地址
    2、你的程序里已经在引用了啊,“ArrDBRecord[i]^.id”
      

  2.   

    你的程序问题多多, 有几个明显的错误:
    1. array of ... 这种动态数组, 并不能够用new命令来设置它的某个元素。动态数组应该用SetLength函数来设置它的大小(元素个数)。
    2. new(ArrDBRecord[i]);   ... dispose(ArrDBRecord[i]);
       new完之后,就dispose了,意味着这个元素所占据的空间又被释放了(暂不论这个new方法本身是否正确)
    3. ArrDBRecord:Array of PDBRecord; 这个ArrDBRecord变量是这个函数的局部变量,它的生存周期仅限于函数内部,函数一返回,这个变量已经不存了,Result:= @ArrDBRecord;返回的是一个不能引用的地址。