typedef struct struct1 {
struct struct2 id2;
};
typedef struct struct2{
int a;
};
int fn( struct struct1 *id1)
{
id1->id2->a=4;
return 1;
}
错误:fn
技术显示错误:错误C2232:'->a'
:左操作数有' struct'输入'.'
解决方案1:错误消息的帮助
int fn1( struct struct1 *id1)
{
id1->id2.a=4;
return 1;
}
OR
解决方案2:使用struct2
指针
int fn2( struct struct1 *id1)
{
struct struct2 *id2 = &id1->id2;
id2->a=4;
return 1;
}
第二种方法fn2
技术也有效。
访问struct2
成员的其他可能解决方案是什么?
我想深入了解这个概念。了解我。
答案 0 :(得分:1)
没有太多方法。一个"其他"方法是使用void *
:
int fn2( void *id1) // Called with a 'struct struct1*'
{
struct struct1 *p = id1;
void *p2 = p->id2;
((struct struct2*)p2)->a=4;
return 1;
}
但这并非如此。事实上,你拥有的两种方法和这两种方法基本上都是一样的。
唯一的区别是->
用于访问指针的成员到struct,其中.
用于访问结构的成员。
您可以使用.
访问成员并完全避免->
:
int fn( struct struct1 *id1)
{
(*id1).id2.a=4;
return 1;
}
或
int fn2( struct struct1 *id1)
{
struct struct2 id2 = (*id1).id2;
id2.a=4;
return 1;
}
->
运算符只是方便访问struct
指针的成员而不是其他任何内容。
答案 1 :(得分:1)
有两种方法可以访问结构的成员。使用指向结构的指针或结构本身:
struct S {
int m;
};
struct S s;
struct S *ps = s;
s.m; // direct access through structure
ps->m; // access through pointer to structure
(*ps).m; // direct access of the structure through dereferencing the pointer
(&s)->m; // get address of structure and get member through it
然后,对于您的示例,您可以编写许多不同的内容,如:
id1->id2.a=4;
(*id1).id2.a=4;
(&(id1->id2))->a = 4;
(&((*id1).id2))->a = 4;