2013-03-13 123 views
0

我有一個相當大的結構裏面有其他結構,然後我想通過這個結構的結構作爲函數的參數。任何人都知道如何去做,或者請給我一個例子!結構的結構作爲參數

+3

下定決心,無論其C或C++。 –

+0

只要通過它?它應該工作正常。 –

+1

該結構的內容是無關緊要的。你只是傳遞一個結構,然後在你的函數中訪問結構中的結構。 – Mike

回答

2
struct B { 
    //your struct.. 
}; 
struct A { 
    B b; 
}; 

void foo(struct A a) 
{ 
    a.b + ???.... 
    //you function 
} 
+0

@icepack按值傳遞數據?特別是如果它是一個大型數據結構? –

0

結構可能同時具有基本類型和複雜類型作爲成員。傳遞具有反過來結構成員的結構與傳遞僅具有基本類型成員的結構沒有區別。

2

如果你的函數不需要修改任何結構的內容,你可以把它像使用任何其他的說法:如果你需要編寫任何結構的成員

struct bigStruct { 
    struct aStruct a; 
    struct anotherStruct b; 
    struct someOtherStruct c; 
    ... 
}; 

void foo(struct bigStruct s) 
{ 
    do_something_with(s.a); 
    do_something_else_with(s.b); 
    ... 
} 

,你將需要一個指針傳遞給結構,並使用->操作符來訪問它的成員:

void bar(struct bigStruct *p) 
{ 
    do_something_with(p->a); 
    do_something_else_with(p->b); 
    .... 
} 

有時,也希望使用指針,如果結構類型是非常大。

請注意,在處理指向結構體的指針時,您只需要使用->運算符。在上面的結構定義中,a,bc是常規結構類型,所以我們可以使用.來訪問它們的成員。例如,假設有如下定義aStruct

struct aStruct { 
    int ival; 
    double dval; 
    char name[20]; 
}; 

我們會通過p訪問這些成員就像這樣:現在

printf("%d\n", p->a.ival); 
printf("%f\n", p->a.dval); 
printf("%s\n", p->a.name); 

,如果我們的bigStruct是像

struct bigStruct { 
    struct aStruct *a; 
    ... 
}; 

定義那麼我們需要爲p的子女和的子女使用->運營商:

printf("%d\n", p->a->ival); 
printf("%f\n", p->a->dval); 
printf("%s\n", p->a->name);