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

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

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

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

struct node
{
  *x
}

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

非常感谢!

4

2 回答 2

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

可以像这样使用

struct bar bar;  /* Structure names and variable names can be the same */
bar.f.a = 5;
bar.g.a = 10;
于 2013-07-30T10:40:37.603 回答
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。所以定义 astruct node应该是完全有效的。

如 2)struct node *x;没有定义临时存储。它定义了一个指向struct node被调用的指针x。它最初不会分配内存,但一旦分配内存,您就可以通过*x.

定义

struct node {
    *x;
};

不是有效的 C。结构的成员必须是有效的 C 类型。否则,您的编译器不知道 stuct 占用了多少内存以及如何访问这些成员。

但是像

struct node {
    char *x;
};

说得通。它用pinter 类型struct node的成员定义 a 到。xchar

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是指向结构的指针时使用。

于 2013-07-30T11:05:02.327 回答