struct node
{
int data;
node* pointerToNextNode;
};
这里pointerToNextNode
是struct node
的类型,它在结构中声明。
结构如何知道自己类型的下一个指针的类型 - 当它本身尚未形成时?
没有使用关键字extern
。这是如何工作的?
答案 0 :(得分:2)
它不需要知道结构,它足以知道类型名称,即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;
}
答案 1 :(得分:1)
此处
的类型pointerToNextNode
是struct node
不,不是。它的类型为struct node *
struct node* pointerToNextNode;
为类型为struct node
的指针变量分配内存。
它没有为struct node
分配内存,因此,直到它,它不需要知道struct node
的大小和表示。只有(数据)类型名称就足够了。
另外,值得一提的是,如果没有typedef
,node* pointerToNextNode;
不应该有效。它应该写成如下
typedef struct node node;
struct node
{
int data;
node* pointerToNextNode;
};
顺便说一句,private:
不是C
,如果我没错。
答案 2 :(得分:1)
对我来说这不能用CC编译 - 正是因为你所说的。
你必须使用struct node *
让编译器知道你想要指针的内存