头文件有3个版本。
版本1:
typedef struct node
{
void* dataPtr;
struct node* link;
} NODE;
版本2:没有旧类型名称'node'(typedef oldTypeName newTypeName)
typedef struct
{
void* dataPtr;
struct* link;
} NODE;
版本3:没有typedef
struct
{
void* dataPtr;
struct* link;
} NODE;
根据C : typedef struct name {...}; VS typedef struct{...} name;, 版本1定义'节点'是多余的,我将其更改为版本2,它工作正常。
再次根据这个答案,当不使用'typedef'时,不能重复使用'NODE'。
但是,使用此版本3头文件的代码工作得很好。 (NODE使用了两次。)
这是代码:
/* Create a list with two linked nodes.*/
#include <stdio.h>
#include <stdlib.h>
#include "version3.h" //Header file
int main (void)
{
//Local Definitions
int* newData;
int* nodeData;
NODE* node;
// Statements
newData = (int*)malloc (sizeof (int));
*newData = 7;
node = createNode(newData);
newData = (int*)malloc (sizeof (int));
*newData = 75;
node->link = createNode(newData);
nodeData = (int*)node->dataPtr;
printf ("Data from node 1: %d\n", *nodeData);
nodeData = (int*)node->link->dataPtr;
printf ("Data from node 2: %d\n", *nodeData);
return 0;
} //main
在这种情况下,'typedef'的用途是什么? (假设在这里我重用了NODE。 - &gt;如果这个假设不正确,请告诉我原因。我不熟悉C语言。)
答案 0 :(得分:3)
以下代码不创建类型。它创建了一个名为NODE
的对象,它具有一个匿名结构,因为它的类型。
struct {
void* dataPtr;
void* link;
} NODE;
int main() {
}
我发现很难相信你问题中的代码会编译。
答案 1 :(得分:0)
typedef
用于为类型指定新名称。当您使用第三版struct
时,它只会声明类型为NODE
的{{1}}。如果你必须声明另一个与struct{ void* dataPtr; struct* link;}
相同类型的变量,你会怎么做?只有一个选项,您必须与NODE
一起声明它,否则它们是不兼容的
如果两个结构是同时声明的,或者它们是使用结构标记或相同的类型名称声明的(使用NODE
),则它们是兼容的。