【发布时间】:2019-02-06 12:54:44
【问题描述】:
我们今天刚刚被介绍给链表,我明白了这个概念,但声明让我很困扰,这是代码:
struct Node
{
int data;
struct Node *next;
};
为什么这不是一个无限循环的声明?
编译器如何识别struct Node?内部的struct Node
对我的第二个问题视而不见后,我的看法如下:
- 创建一个结构,其中有一个整数和一个指向结构的指针 同类型。
- 在第一个结构体中创建指针指向的结构体,它包含一个整数和一个指向同类型结构体的指针。
- 创建由第二个结构中的指针指向的结构,该结构是由第一个结构中的指针指向的结构。
- ...
【问题讨论】:
-
问题是结构内部没有
Node结构,您有一个指向Node结构的指针 . -
所有指针,无论其类型如何,都具有相同的大小。
-
@AxeonThra 严格来说,这不一定是真的。它只是碰巧在“现代”PC 型系统上如此。但是,指针的大小始终是已知且固定的。
-
在编译器读取
struct Node *next时,它(暂时)将其视为指向不完整类型的指针。 -
大致意思是“它是一个指向某物的指针,虽然我还不知道something的大小,但指针的大小 i> 总是一样的”。
标签: c linked-list