已经声明的struct之前的“struct”

时间:2016-06-19 04:15:11

标签: c struct

我还是C新手。我知道您可以使用已声明的struct作为新数据类型,例如intdouble等。但是,我遇到了struct写得像这样:

struct AdjListNode
{
    int dest;
    int weight;
    struct AdjListNode* next;
};

在此struct中,“下一个”指针的数据类型为struct AdjListNode*struct与已声明的AdjListNode*有什么关系?谢谢!

3 个答案:

答案 0 :(得分:2)

  

struct与已声明的AdjListNode *有什么关系?

答案是c语法需要它。

通过撰写AdjListNode

获取struct AdjListNode { ... };类型

AdjListNode是一个struct标记,在声明变量时总是必须使用struct AdjListNode

请参阅此简单示例(结构中没有指针):

#include <stdio.h>

struct sSomeName
{
    int x;
};

int main(void) {
    struct sSomeName var;    // OK, variable of type struct sSomeName 
    struct sSomeName* pVar;  // OK, pointer to variable of type struct sSomeName 

    // sSomeName var2;       // ERROR: unknown type name 'sSomeName'

    var.x = 5;
    pVar = &var;

    printf("%d\n", pVar->x);
    return 0;
}

因此,如果您想在struct内添加指针,则必须像在struct sSomeName内一样编写main,例如:

struct sSomeName
{
    int x;
    struct sSomeName* p;
};

使用typedef

如果您想要名为AdjListNode的类型,则必须使用typedef

typedef示例可能如下所示:

#include <stdio.h>

typedef struct sSomeName sSomeName;

struct sSomeName
{
    int x;
    sSomeName* p;
};

int main(void) {
    sSomeName var;
    sSomeName* pVar;

    var.x = 5;
    var.p = NULL;
    pVar = &var;

    printf("%d\n", pVar->x);
    printf("%p\n", (void*)pVar->p);
    return 0;
}

答案 1 :(得分:1)

这里声明了声明结构的声明指针。这主要用于实现链表或树等其他数据结构。

它确实意味着重新声明了struct。它类似于声明一个struct变量。

答案 2 :(得分:0)

结构创建如下:typedef struct AdjListNode。例如:

#include <stdio.h>
#include <stdlib.h>

typedef struct AdjListNode
{
    int dest;
    int weight;
    struct AdjListNode* next;
}AdjListNode;


typedef struct Nodo{
    char *nombre;
    int *edad;
    struct Nodo *siguiente;
}Nodo;

int main(int argc, char **argv) {
    AdjListNode *nodo=malloc(sizeof(AdjListNode));
    nodo->dest=1;
    nodo->weight=2;
    nodo->next=NULL;
    printf("Nodo-->dest: %d", nodo->dest);
    free(nodo);
}