关于代码中的错误,第一个构造了静态数量的 MyStruct 元素并将它们存储在 ms 数组中,因此 ms 是 MyStruct 结构的数组,当然在这里你的意思是它只有 2 个元素,稍后您不能将任何其他元素添加到 ms 数组中,尽管您限制了 MyStruct 元素的数量,而在第二种情况下,当您有一个链表时,您可以链接任意数量的 MyStruct 元素,这将导致动态数字的 MyStruct 元素,第二种情况允许您在运行时添加任意数量的 MyStruct,第二种情况在内存中的概念上应该如下所示:
[ MyStruct#1 ] ----> [ MyStruct#2 ] ----> [ NULL ]
例如,NULL 虽然可能是 MyStruct#3,而第一个:
[ MyStruct#1 ] ----> [ MyStruct#2 ]
就是这样,不能添加 MyStruct#3。
现在让我们看一下您编写的代码:
struct MyStruct
{
int num;
} ms[1];
ms[1]
真的意味着为我创建一个包含一个 MyStruct 元素的 ms 数组。
接下来的代码假设您创建了两个:
ms[0].num = 5;
ms[1].num = 15
因此它应该是:
struct MyStruct
{
int num;
} ms[2];
它会正常工作!并记住我为它制作的简单插图:
[ MyStruct#1 ] ----> [ MyStruct#2 ]
第二种情况:
struct MyStruct
{
int num;
MyStruct *next;
};
MyStruct *ms = new MyStruct;
ms->num = 5;
ms->next = new MyStruct;
ms->next->num = 15;
new
如果您保存源代码,则此代码使用 C++ 运算符,因为.cpp
您将能够编译为 C++ 应用程序而没有错误,而对于 C,语法应更改如下:
struct MyStruct
{
int num;
MyStruct *next;
};
MyStruct *ms = (MyStruct *) malloc(sizeof MyStruct);
ms->num = 5;
ms->next = (MyStruct *) malloc(sizeof MyStruct);
ms->next->num = 15;
并且不要忘记包含#include <stdlib.h>
该功能,您可以在此处malloc()
阅读有关此功能的更多信息。
作为第一种情况,回想一下我对链表的说明:
其中 NULL 实际上是 ms->next MyStruct 结构的下一个元素,为了更详细地解释它,请回想一下 ms->next 是 MyStruct 的指针,我们已经分配了它堆中的一个空间,所以现在它指向一个与 MyStruct structure 大小相同的内存块。最后,这里有一个关于何时使用链表以及何时使用数组的Stackoverflow问题,这样您就可以准确了解为什么世界各地的人们有时更喜欢链表而有时更喜欢数组。
[ MyStruct#1 ] ----> [ MyStruct#2 ] ----> [ NULL ]