type
PzjzlStruct = ^zjzlStruct;
zjzlStruct = record
        hbdm  :char;                  
        yhdm  :array[0..3] of char;                    
        yhzh  :array[0..9] of char;  
end;过程定义:
function ReadZjzl(zjzh: PChar; maxNum: Integer; zjzlStruct: PzjzlStruct; retNum: ^Integer);调用:
var
  zjzl: PzjzlStruct;begin
  zjzl := new(PzjzlStruct);
  ...
  ret = readZjzl('00000001' , 10, zjzl, &retNum );
  dispose(zjzl);
end;或者这个样子:
过程定义:
function ReadZjzl(zjzh:String; maxNum: Integer; var zjzlStruct: zjzlStruct; var retNum: Integer);
//这里如果在ReadZjzl中要修改zjzlStruct 和 retNum的话,才需要var关键字调用:
var
  zjzl: zjzlStruct;//不用指针
begin
  zjzl.hbdm := 'a';//初始化
  ...
  ret = readZjzl('00000001' , 10, zjzl, retNum );
end;一般在C/C++中的函数参数中如果用指针的话,都是因为在函数内部要修改参数,所以才用
传地址。 在pascal中实现相同的功能不需要使用指针,只要在函数声明中需要修改的参数
前面加上var 关键字就可以了。另外 char * 类型可以用PChar替换。
不过类似与上面的var 的使用,最好使用String。方便一些。
在这个函数内部显然不需要修改 zjzh(因为const char *),所以就用string 就可以了。

解决方案 »

  1.   

    另外 new zjzlStruct[10] 不是数组定义,而是建立指针对象的实例。
    pascal 中一样可以用 new(指针对象) 来做。
    用 Dispose来释放。
    不过推荐使用 GetMem 和 FreeMem 函数。 
    new 和 dispose 是以前DOS下面的用法。
      

  2.   

    改错!!
    function ReadZjzl(zjzh: PChar; maxNum: Integer; zjzlStruct: PzjzlStruct; retNum: ^Integer);
    应该是 
    function ReadZjzl(zjzh: PChar; maxNum: Integer; zjzlStruct: PzjzlStruct; retNum: ^Integer): Integer;另外一个也一样。
      

  3.   

    passos(古月春秋):首先谢谢你的解答,不过我还有一个不理解,
    调用:
    int readZjzl( const char * zjzh, int maxNum, zjzlStruct * zjzl , int * retNum);
    过程后, 我要zjzl返回类似10个元素的数组,如VC++:
    zjzlStruct * zjzl;
    zjzl = new zjzlStruct[10];
    在DELPHI中是如何实现的啦?
    顺便问一下:我的分数如何给你呢?