链表的结构如何知道其自身类型的下一个指针的类型?
How does the struct of a linked list know the type of next pointer of its own type?
struct node
{
int data;
node* pointerToNextNode;
};
这里的pointerToNextNode
是struct node
的类型,是在struct内部声明的。
结构如何知道其自身类型的下一个指针的类型 - 当它本身尚未形成时?
没有使用关键字extern
。这是如何工作的?
Here pointerToNextNode
is the type of struct node
不,不是。它的类型是 struct node *
struct node* pointerToNextNode;
为类型为 struct node
.
的 pointer 变量分配内存
它不会为 struct node
分配内存,因此,到此为止,它不需要知道 struct node
的大小和表示形式。只有(数据)类型名称就足够了。
此外,值得一提的是,如果没有 typedef
,node* pointerToNextNode;
应该无效。应该这样写
typedef struct node node;
struct node
{
int data;
node* pointerToNextNode;
};
顺便说一句,如果我没记错的话,private:
不是 C
的东西。
对我来说,这不是使用 CC 编译的——正是因为你所说的。
您必须使用 struct node *
让编译器知道您需要 pointer
的内存
不需要知道结构,知道类型名就够了,即struct node
——而且已经定义好了。
通过前向类型声明可以获得相同的结果:
struct node; // declare the struct not defining it
struct node *pointer; // declare variable
void foo()
{
if(pointer != NULL) // OK, we use the pointer only
if(pointer->x == 0) // invalid use - struct contents unknown yet
return;
}
struct node { // supply a definition
int x;
};
void bar()
{
if(pointer != NULL)
if(pointer->x == 0) // OK - struct contents already known
return;
}
struct node
{
int data;
node* pointerToNextNode;
};
这里的pointerToNextNode
是struct node
的类型,是在struct内部声明的。
结构如何知道其自身类型的下一个指针的类型 - 当它本身尚未形成时?
没有使用关键字extern
。这是如何工作的?
Here
pointerToNextNode
is the type ofstruct node
不,不是。它的类型是 struct node *
struct node* pointerToNextNode;
为类型为 struct node
.
的 pointer 变量分配内存
它不会为 struct node
分配内存,因此,到此为止,它不需要知道 struct node
的大小和表示形式。只有(数据)类型名称就足够了。
此外,值得一提的是,如果没有 typedef
,node* pointerToNextNode;
应该无效。应该这样写
typedef struct node node;
struct node
{
int data;
node* pointerToNextNode;
};
顺便说一句,如果我没记错的话,private:
不是 C
的东西。
对我来说,这不是使用 CC 编译的——正是因为你所说的。
您必须使用 struct node *
让编译器知道您需要 pointer
不需要知道结构,知道类型名就够了,即struct node
——而且已经定义好了。
通过前向类型声明可以获得相同的结果:
struct node; // declare the struct not defining it
struct node *pointer; // declare variable
void foo()
{
if(pointer != NULL) // OK, we use the pointer only
if(pointer->x == 0) // invalid use - struct contents unknown yet
return;
}
struct node { // supply a definition
int x;
};
void bar()
{
if(pointer != NULL)
if(pointer->x == 0) // OK - struct contents already known
return;
}