delphi裡function怎麼返回多個值呢?

來源:互聯網
上載者:User
delphi裡function怎麼返回多個值呢? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206210840253.html
我自己寫了一個function,要想同時返回三個double類型的數值,請問怎麼實現呢?

用引用做為參數。如:  
   
  function   abc(var   aa,bb,cc:double):double;//共相當於返回4個double值  
  begin  
      aa:=......  
      bb:=......  
      cc:=.....  
      result:=......  
  end;  
  //---------------------------------------------  
  ...以下是調用  
  var  
      aatrue,bbtrue,cctrue,ddtrue:double;  
  begin  
      aatrue:=...  
      bbtrue:=...  
      cctrue:=...  
      ddtrue:=abc(aatrue,bbtrue,cctrue);  
  end;  
  //倉促寫的,沒有用大小寫母,不好看,見諒

我測試的結果:  
   
  function   abc(var   aa,bb,cc:double):double;//共相當於返回4個double值  
  begin  
      aa:=12.6;  
      bb:=88.89;  
      cc:=2345.907;  
      result:=aa+bb+cc;  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var  
      aatrue,bbtrue,cctrue,ddtrue:double;  
  begin  
      aatrue:=0.0;  
      bbtrue:=0.0;  
      cctrue:=0.0;  
      ddtrue:=abc(aatrue,bbtrue,cctrue);  
      memo1.Lines.Add('以下是四個變數新值:'+floattostr(aatrue)+','+floattostr(bbtrue)+','+floattostr(cctrue)+','+floattostr(ddtrue));  
  end;  
   
  結果:  
  12.6,88.89,2345.907,2447.397

result返回什麼啊?  
  能寫具體點嗎?那三個傳回值我是想分別得到的.

那如果我沒有傳遞參數呢?C_LT_L,C_LA_B,C_HI_H三個參數都是類裡的公開變數,現在想用這個函數來獲得這三個變數  
  function   THHUCoord.GetParams();  
  begin  
      C_LT_L;  
      C_LA_B;  
      C_HI_H;  
  end;

要麼就用var  
  要麼就返回一個記錄(結構體)

type   IWantData   =   record  
  aa:...;  
  bb:...;  
  cc:...;  
  end;  
   
  function   abc(var   aa,bb,cc:double):IWantData   ;//共相當於返回3個double值  
  var  
      ret:   IWantData;  
  begin  
  ret.aa:=......;  
  ret.bb:=......;  
  ret.cc:=.....;  
  result:=ret;  
  end;

強烈鄙視問題解決後不結貼的人!  
  強烈鄙視技術問題解決後把貼子轉移到非技術區的人!  
  鄙視你們!  
   
  http://community.csdn.net/Expert/topic/5216/5216675.xml?temp=.9262659

函數   怎麼能   返回多個值呢?  
   
 

To   樓上:  
   
  type  
          TTwo   =   record  
          x   :   String;  
          y   :   String;  
          z   :   String;  
  end;  
   
  Procedure   FunOne(var   a,b,c   :integer);   //傳址(引用、別名)  
  begin  
        a   :=   9;   //給三個變數賦值  
        b   :=   8;  
        c   :=   7;  
  end;  
   
  function   FunTwo(InStr   :string)   :TTwo;             //返回記錄  
  var   tempRec   :TTwo;  
  begin  
          temp.x   :=   copy(InStr,1,1);  
          temp.y   :=   copy(InStr,2,1);  
          temp.z   :=   copy(InStr,3,1);  
          result   :=   tempRec;  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
        a,b,c   :   integer;  
        InStr   :   String;  
  begin  
        a   :=   0;//初值  
        b   :=   0;  
        c   :=   0;  
        funOne(a,b,c);  
        //測試經FunOne處理後(相當於“返回”)的a,b,c值變為9,8,7  
        showmessage(inttostr(a)+','+inttostr(b)+','+inttostr(c));  
   
        InStr   :=   'xyz';  
        //測試FunTwo()返回的3個記錄成員值   x,y,z  
        showmessage(FunTwo(InStr).x+','+FunTwo(InStr).y+','+FunTwo(InStr).z);  
  end;  
   
  //上面兩種方法,如果說第一種用“引用”做參數的方法只是相當於返回多值的話,那第二種,用記錄,則是真正返回多值

temp.x       改為     tempRec.x  
  temp.y       改為     tempRec.y  
  temp.z       改為     tempRec.z

var   xxx;   不是已經可以解決了嗎?

謝謝。  
  的確實現了,   多個值的改動。  
   
  ------------------  
  不過,   鑽牛角的話,   這算不得   “返回多個值”的,  
   
  傳地址調用的時候,只能說是,改變了   3   個值,   而只返回了   1   個變數   的  
  返回結構體,也是一個變數的,只是這個變數還是一個結構體  
   
  ??  
  不知道   Dephi     或   別的語言中,   有沒有真正   返回多個值   的  
 

這種問題有什麼意義嗎?

Delphi已經夠NB了,函數可以返回任意類型。  
  你試試C++,很多類型必須要明確使用指向類型的指標才能作為函數的傳回值。  
 

認同樓上兩層所說

最簡單的方法,定義幾個全域變數,在函數裡賦值,在別處引用,當然,弊端不用我說,是很多的,我個人不推薦這麼寫,但是確實很簡單

樓上的,你讓別人用你的辦法,還是不用你的辦法啊?  
   
 

函數和過程其實是一樣的,都不存在傳回值的問題!  
  只是為了方便給一個傳回值而已。  
  最後都是指標;  
  還是用VAR吧!

怎麼不能結貼啊

還有一個方法真的可以返回一個ARRAY  
   
  function     Mytest(......):OleVariant;  
  begin  
      Result:=VarArrayCreate([0,2],varInteger);  
      Result[0]   :=   0;  
      Result[1]   :=   1;  
      Result[2]   :=   2;  
  end;  
 

或者是定義一個類型  
   
   
  TmyType   =   array   [0..2]   of   integer;  
   
   
  function   myText(...):TmyType;  
  begin  
      Result[0]   :=   1;  
      result[1]   :=   1;  
      result[2]   :=   0;  
  end;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.