線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2322
推到 Plurk!
推到 Facebook!

struct的簡捷用法

尚未結案
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-03 00:11:15 IP:211.162.xxx.xxx 未訂閱
各位先進們好,小弟在如何使用struct上有疑惑,請指點一二: 利用struct可以很方便的定義出自己需要的結構:
struct [] {
  [ ] ;
    ...
} []
小弟疑惑的地方在於如果需要多次用到該結構體的話,那麽後面的structure variables不是要寫許多啊(聲明一大串呀),有點麻煩呢。 例如在Delphi中:

procedure TForm1.Button8Click(Sender: TObject);
type
  TOneRecord = record
    Name: String;
    Age:  Word;
  end;
var
  OneRecord:      TOneRecord;  //這就很方便,需要一個就聲明一個
  SecondRecord:   TOneRecord;
  ThreeRecord:    TOneRecord;
begin
  OneRecord.Name   := 'bigdogchina';
  SecondRecord.Name := 'bigdogchina';
  ThreeRecord.Name  := 'bigdogchina';
  ShowMessage(OneRecord.Name);
  ShowMessage(SecondRecord.Name);
  ShowMessage(ThreeRecord.Name);
end;
而在BCB中可以這樣做:

...
struct TOneRecord{
AnsiString Name;
DWORD  Age;
}OneRecord,SecondRecord,ThreeRecord;  //如果有許多實例的話,要在這後面聲明很多啊,疑惑點就在這裏,有沒有簡捷的寫法
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        OneRecord.Name    = "bigdogchina";
        SecondRecord.Name = "bigdogchina";
        ThreeRecord.Name  = "bigdogchina";
        ShowMessage(OneRecord.Name);
        ShowMessage(SecondRecord.Name);
        ShowMessage(ThreeRecord.Name);
}
如果需要一個該結構的實例,就要在struce後面加上去一個(如果是10個,後面不就要加了10個啊),不如Pascal來的方便(需要時就聲明一個,不用在type後面加),小弟想請教是否有簡捷的寫法呢?謝謝 ================================= <>人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網
------
人生在勤,不索何获?
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-03 00:57:46 IP:211.76.xxx.xxx 未訂閱
bigdogchina 您好:    其實C/C++的structure也是可以這樣做的喔!
struct TOneRecord{
  AnsiString Name;
  DWORD  Age;
};  // (注意要有分號)
// in C
struc TOneRecord OneRecord,SecondRecord,ThreeRecord;
// in C  
struc TOneRecord OneRecord,SecondRecord,ThreeRecord;
or
TOneRecord OneRecord,SecondRecord,ThreeRecord;
至於將變數寫在定義後面,主要可能是該結構宣告只用一次,乾脆將定義與變數一塊寫出,或者是更進一步的要建立一個新的型態,如下:
typedef struct tagVector { float x;
                           float y;
                           float z; } Vector, *pVector;
此時我們多了兩個新的自定型態:Vector, pVector (指標型態);
所以,
Vector v1, v2, v3; 等同於    struct tagVector v1, v2, v3;  等同於    struct { float x;
         float y;
         float z; } v1, v2, v3;
//===============================================    pVector pv1, pv2; 等同於 (不必再加*號)    struct tagVector *pv1, *pv2; 等同於    struct { float x;
         float y;
         float z; } *pv1, *pv2;    一樣是方便的喔!
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-03 10:03:00 IP:211.162.xxx.xxx 未訂閱
引言: bigdogchina 您好: 其實C/C 的structure也是可以這樣做的喔!
struct TOneRecord{
  AnsiString Name;
  DWORD  Age;
};  // (注意要有分號)    // in C
struc TOneRecord  OneRecord,SecondRecord,ThreeRecord;    // in C  
struc TOneRecord  OneRecord,SecondRecord,ThreeRecord;
or
TOneRecord  OneRecord,SecondRecord,ThreeRecord;
至於將變數寫在定義後面,主要可能是該結構宣告只用一次,乾脆將定義與變數一塊寫出,或者是更進一步的要建立一個新的型態,如下:

typedef struct tagVector { float x;
                           float y;
                           float z; } Vector, *pVector;    此時我們多了兩個新的自定型態:Vector, pVector (指標型態);
所以,
Vector v1, v2, v3; 等同於    struct tagVector v1, v2, v3;  等同於    struct { float x;
         float y;
         float z; } v1, v2, v3;
//===============================================    pVector pv1, pv2; 等同於 (不必再加*號)    struct tagVector *pv1, *pv2; 等同於    struct { float x;
         float y;
         float z; } *pv1, *pv2;    一樣是方便的喔!
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2004/08/03 01:04:04
Thank you very much!!! 非常精彩的解答,小弟疑惑的地方豁然開朗。richtop前輩嚴謹的治學態度更值得我認真學習 ================================= <>人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網
------
人生在勤,不索何获?
系統時間:2024-06-29 4:50:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!