有没有办法访问嵌套在两个其他结构中而不多次使用点运算符的结构的单个成员?访问嵌套结构中的成员
0
A
回答
2
与BASIC或Pascal的一些变体不同,它们有一个with
关键字,它允许您直接访问结构的内部成员,C没有这样的结构。
然而你可以用指针来做到这一点。如果你有一个特定的内部成员,你会经常访问,你可以将该成员的地址存储在指针中,并通过指针访问该成员。
假设,例如,你有以下的数据结构:
struct inner2 {
int a;
char b;
float c;
};
struct inner1 {
struct inner2 in2;
int flag;
};
struct outer {
struct inner1 in1;
char *name;
};
和外类型的变量:
struct outer out;
代替访问的最内struct
这样的成员:
out.in1.in2.a = 1;
out.in1.in2.b = 'x';
out.in1.in2.c = 3.14;
你声明了一个类型为的指针并给它的地址out.in1.in2
。然后你可以直接使用它。
struct inner2 *in2ptr = &out.in1.in2;
in2ptr->a = 1;
in2ptr->b = 'x';
in2ptr->c = 3.14;
2
有没有办法访问嵌套在两个其他结构中的结构的单个成员而不多次使用点运算符?
通过标准C.
号不使接入代码清洁然而,你可能会考虑一些static inline
辅助功能。
例如:
struct snap {
int memb;
};
struct bar {
struct snap sn;
};
struct foo {
struct bar b;
}
static inline int foo_get_memb(const struct foo *f)
{
return f->b.sn.memb;
}
1
你可以使用->
操作。
您可以获取内部成员的地址,然后通过指针访问它。
0
不完全回答你的问题。
struct
的第一位成员可以通过取struct
的地址进行访问,将其转换为指向struct
的第一位成员的指针类型并将其取消引用。
struct Foo
{
int i;
...
};
struct Foo foo {1};
int i = *((int*) &foo); /* Sets i to 1. */
这个适应嵌套结构的给我们,例如:
struct Foo0
{
struct Foo foo;
...
};
struct Foo1
{
struct Foo0 foo0;
...
};
struct Foo2
{
struct Foo1 foo1;
...
};
struct Foo2 foo2;
foo2.foo1.foo0.foo.i = 42;
int i = *((int*) &foo2); /* Initialises i to 42. */
struct Foo0 foo0 = {*((struct Foo*) &foo2)}; /* Initialises foo0 to f002.f001.foo0. */
这是明确的,作为C-标准保证没有一个结构的第一个成员之前填充,它仍然不是很好。
相关问题
- 1. 如何使用指针访问嵌套结构的成员?
- 2. 在JSON中访问嵌套成员
- 3. 嵌套结构中的访问字段
- 4. 访问类中的结构的成员
- 5. 嵌套类的访问成员
- 6. 结构中的类访问类成员
- 7. 访问三个嵌套结构中最内层的指针成员变量
- 8. 合成结构成员的访问器
- 9. 访问嵌套容器成员
- 10. 访问嵌套结构的字段
- 11. 嵌套结构的访问元素
- 12. 盒装嵌套结构的访问值
- 13. 可能访问结构成员的'TypeId'?
- 14. 结构成员访问的性能
- 15. #define会访问该结构的成员?
- 16. 访问结构成员的指针
- 17. 如何访问嵌套结构变量
- 18. 访问基于结构嵌套属性
- 19. 通过嵌套结构访问指针
- 20. 访问嵌套结构插槽
- 21. 无法访问结构数组中的成员变量结构
- 22. 成员使用指针访问嵌套结构。箭头运算符相当于
- 23. 访问结构成员时出现Segfault
- 24. 通过地址访问结构成员
- 25. 访问结构成员字符指针
- 26. 使用指针访问结构成员
- 27. 嵌套结构作为类中的成员
- 28. 访问类私有成员内的结构成员?
- 29. 访问嵌套函数中的成员变量
- 30. 嵌套类中的不可访问成员 - 为什么?
你能举个例子吗? –