struct hello
{
char id[5];
int marks;
} a;
1)'a'是什么?请用简单的例子来解释,我的讲师不善于解释。
2)如果a是* a ??我知道它是一个指针,但我们什么时候使用它?
3)struct节点是保留字吗?另外为什么我看到一些结构有这个'struct node * x',我知道它是一个临时存储器,但为什么它在单词节点旁边而不是在结构内?像这样:
struct node
{
*x
}
4)如果我在结构中有结构怎么办?我们什么时候使用它,我可以有例子吗?
非常感谢!
答案 0 :(得分:3)
a
是struct hello
类型的正常变量。
你永远不会看到像
这样的东西struct node
{
*x
}
在一个工作计划中。可能类似于struct node *x;
。
关于结构中的字段,它们可以像任何其他变量一样声明,因此结构内的嵌套结构可以正常工作。一个愚蠢的例子:
struct foo
{
int a;
};
struct bar
{
struct foo f;
/* If you're declaring a variable or (in this case) a structure
* member, then you don't need to give a name to the structure
*/
struct
{
int a;
} g;
};
bar
结构现在有两个字段:f
和g
。其中每个都是包含名为a
的成员的另一个结构。
可以像
一样使用struct bar bar; /* Structure names and variable names can be the same */
bar.f.a = 5;
bar.g.a = 10;
答案 1 :(得分:0)
1)a
是struct hello
类型的变量。就像你可以定义
struct hello a;
如果已知struct hello
。
您也可以内联甚至匿名定义
struct {
// some members
} a;
2)此上下文中的*a
无效。任何编译器都会告诉您不能取消引用非指针类型。 a
这里是struct hello
类型。
另一方面,struct hello *a;
有效,并将a
定义为指向struct hello
的指针。
3)我不知道任何保留关键字node
的标准库。因此,定义struct node
应该完全有效。
与2中一样)struct node *x;
没有定义临时存储。它定义了一个指向struct node
x
的指针。它最初没有分配给它的内存,但一旦它分配,你可以通过*x
。
定义
struct node {
*x;
};
无效C.结构的成员必须是有效的C类型。否则,您的编译器不知道stuct占用多少内存以及如何联系这些成员。
但是像
struct node {
char *x;
};
有道理。它定义了一个struct node
,其成员x
的类型为char
。
4)结构中的结构完全有效,因为您可以为结构成员提供任何有效的C类型。例子:
struct test {
struct hello a; // using an already defined struct
struct test * next; // using a pointer to own struct
// or anonymous structs
// normally used for readability of code
struct {
char member1;
int member2;
} anonymous_struct;
// or even unions are allowed here
// anonymous here
union {
int a;
double b;
} u;
} nested_struct;
现在可以将这些作为嵌套结构访问:
nested_struct.a
nested_struct.next->a
nested_struct.anonymous_struct.member1
nested_struct.u.b
struct rusage
中定义了一个实际示例sys/resource.h
,其struct timeval
中定义了嵌套sys/time.h
。 http://linux.die.net/man/2/getrusage
请注意,x->a
在语法上等同于(*x).a
,并且只有在x
是指向struct的指针时才能使用。{/ p>