2011-03-11 122 views
0

我不知道我在做什麼...結構和指針

讓說我有一個結構

struct Inner{ 
    exampleType a; 
    int b; 
} 

struct Outer{ 
    int current; 
    int total; 
    Inner records[MAXNUMBER]; 
} 

struct Outer2{ 
    Outer outer; 
} 

和我有以下功能:

void try3(Outer2& outer, type var, type2 var2){ 
} 

void try2(Outer2* outer){ 
    try3(*outer, var, var2); 
} 

主要內部:

int myMain(int argc, char *argv[]){ 
    Outer2 outer2; 
    try2 (&outer2); 
} 

這裏是任務離子。我可以堅持以下行try3增加的當前值:

++outer.outer.current; 
+4

你試過了嗎? – 2011-03-11 02:18:25

+0

好吧,首先我沒有在函數try3()的主體中看到名爲outer2的任何符號... – julkiewicz 2011-03-11 02:20:08

+0

try3中沒有'outer2'。你也從來沒有初始化任何地方的任何整數。試着做你想做的事,然後看看會發生什麼。 – 2011-03-11 02:22:05

回答

0

try3開始,您需要使用++outer.outer.current,因爲outer是該點處變量的名稱。要回答實際問題,請看這兩個函數。 try2需要一個指向Outer2的指針,所以不需要複製。 try2將此傳遞給參考Outer2try3,因此不再進行復制。這意味着是的,++outer.outer.current實際上會影響在myMain中聲明的原始outer2

編輯(每布賴恩的評論)

然而,outer.outer.current從未初始化,除非那不是你的真實myMain,如此以來,價值從未增量之前定義的current終值是不確定的。

+0

除了沒有任何變量已經初始化,所以行爲仍然是未定義的。 – 2011-03-11 02:28:01

+0

@Brian看到我上面的評論 – user470379 2011-03-11 02:29:09

+0

我相信你需要使用'outer.outer.current',因爲'try3'中的'outer'需要一個'Outer2'對象叫做'outer',它也有一個名爲'outer'的成員變量。 – dappawit 2011-03-11 02:29:23

2

errr,不,try3沒有的事主叫outer2的知識。

你可以去outer.outer.current ++; in try3

+0

oops,我更正了我的帖子 – user618712 2011-03-11 02:24:20

1

當然可以,爲什麼不呢?這裏是你的一個工作示例:

typedef short exampleType; 

struct Inner 
{ 
    exampleType a; 
    int b; 
}; 

struct Outer 
{ 
    enum { MAXNUMBER = 2 }; 

    int current; 
    int total; 
    Inner records[MAXNUMBER]; 
}; 

struct Outer2 
{ 
    Outer outer; 
}; 

typedef int type; 
typedef int type2; 

void try3 (Outer2& outer, type var, type2 var2) 
{ 
    ++outer.outer.current; 
} 

void try2 (Outer2* outer) 
{ 
    int var = 1, var2 = 2; 
    ++outer->outer.current; 
    try3(*outer, var, var2); 
} 

int main() 
{ 
    Outer2 outer2; 
    outer2.outer.current = 1986; 
    try2 (&outer2); 
}