需要解释C编程中的结构

时间:2013-07-30 10:38:53

标签: c pointers structure nodes

struct  hello
{
  char id[5];
  int marks;
} a;

1)'a'是什么?请用简单的例子来解释,我的讲师不善于解释。

2)如果a是* a ??我知道它是一个指针,但我们什么时候使用它?

3)struct节点是保留字吗?另外为什么我看到一些结构有这个'struct node * x',我知道它是一个临时存储器,但为什么它在单词节点旁边而不是在结构内?像这样:

struct node
{
  *x
}

4)如果我在结构中有结构怎么办?我们什么时候使用它,我可以有例子吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

astruct 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结构现在有两个字段:fg。其中每个都是包含名为a的成员的另一个结构。

可以像

一样使用
struct bar bar;  /* Structure names and variable names can be the same */
bar.f.a = 5;
bar.g.a = 10;

答案 1 :(得分:0)

1)astruct 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.hhttp://linux.die.net/man/2/getrusage

请注意,x->a在语法上等同于(*x).a,并且只有在x是指向struct的指针时才能使用。{/ p>