我还是C新手。我知道您可以使用已声明的struct
作为新数据类型,例如int
,double
等。但是,我遇到了struct
写得像这样:
struct AdjListNode
{
int dest;
int weight;
struct AdjListNode* next;
};
在此struct
中,“下一个”指针的数据类型为struct AdjListNode*
。 struct
与已声明的AdjListNode*
有什么关系?谢谢!
答案 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);
}