有人可以向我解释在这个代码中如何定义链表中的节点我们可以在完成声明节点本身之前定义节点类型的指针吗?
<div class="postContent <?php
if (strlen(trim($post->getTitle())) > 17) print 'bot65';
else print 'bot50'; ?>
">
// content
</div>
答案 0 :(得分:1)
要声明指向结构的指针,编译器不需要知道结构布局。它只需要知道这样的结构存在。
编译代码时,编译器会在开始编译struct字段之前将结构名称添加到已知结构列表中。
因此,当谈到struct field next
时,它知道名为node
的结构存在。
标准说:
6.7.2.1结构和联合说明符
约束
结构或联合不得包含不完整或功能类型的成员(因此, 结构不应包含自身的实例,但可以包含指向实例的指针 本身),
答案 1 :(得分:0)
以下代码有效,目前尚不清楚您遇到了什么问题,但希望能回答这个问题。
struct node {
int data;
struct node *next;
};
int main()
{
struct node A;
A.data = 0;
A.next = 0;
struct node B;
B.data = 1;
B.next = &A;
return 0;
}
答案 2 :(得分:0)
这里没有问题:
struct node
{
int data;
struct node* next; // there is no problem here, the only thing the compiler
// needs to know is that "struct node" exists and he knows that
// because we are right in the middle of the declaration
// of the struct. We only declare a pointer to
// struct node here and therefore the compiler does not need
// to know the complete structure of struct node here.
} var_node;
另一方面,这不起作用:
struct node
{
int data;
struct node next;
} var_node;
因为这是一个没有意义的递归声明:struct node
将包含另一个struct node
,其中包含另一个struct node
等等。