结构和指针
我不知道我在做什么...结构和指针
让说我有一个结构
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;
从try3
开始,您需要使用++outer.outer.current
,因为outer
是该点处变量的名称。要回答实际问题,请看这两个函数。 try2
需要一个指向Outer2
的指针,所以不需要复制。 try2
将此传递给参考Outer2
的try3
,因此不再进行复制。这意味着是的,++outer.outer.current
实际上会影响在myMain
中声明的原始outer2
。
编辑(每布赖恩的评论)
然而,outer.outer.current
从未初始化,除非那不是你的真实myMain
,如此以来,价值从未增量之前定义的current
终值是不确定的。
除了没有任何变量已经初始化,所以行为仍然是未定义的。 – 2011-03-11 02:28:01
@Brian看到我上面的评论 – user470379 2011-03-11 02:29:09
我相信你需要使用'outer.outer.current',因为'try3'中的'outer'需要一个'Outer2'对象叫做'outer',它也有一个名为'outer'的成员变量。 – dappawit 2011-03-11 02:29:23
errr,不,try3没有的事主叫outer2的知识。
你可以去outer.outer.current ++; in try3
oops,我更正了我的帖子 – user618712 2011-03-11 02:24:20
当然可以,为什么不呢?这里是你的一个工作示例:
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);
}
你试过了吗? – 2011-03-11 02:18:25
好吧,首先我没有在函数try3()的主体中看到名为outer2的任何符号... – julkiewicz 2011-03-11 02:20:08
try3中没有'outer2'。你也从来没有初始化任何地方的任何整数。试着做你想做的事,然后看看会发生什么。 – 2011-03-11 02:22:05