gpt4 book ai didi

c++ - 在 C++ 中声明变量与动态分配内存给变量?

转载 作者:太空狗 更新时间:2023-10-29 20:16:04 27 4
gpt4 key购买 nike

我对只声明一个变量之间的区别感到有点困惑,例如:

int n;

并使用“new”为变量动态分配内存,例如:

int m = new int;

我刚刚从一个简单的链表项目中注意到,当我以节点对象的形式插入一个新值时,我必须动态创建一个新的节点对象并将所需的值附加到它,然后链接它到我列表的其余部分。然而..在同一个函数中,我可以只定义另一个节点对象,例如。节点类型 *N。并使用此指针遍历我的列表。我的问题是..当我们只是声明一个变量时,内存不会立即分配..或者有什么区别?

谢谢!

最佳答案

尽可能使用自动存储分配变量:

int n;

结束

int* m = new int; // note pointer

在您的情况下首选动态分配的原因是链表的定义方式。 IE。每个节点都包含一个指向下一个节点的指针(可能)。因为节点必须存在于创建它们的点之外,所以它们是动态分配的。

NodeType *N. and traverse my list using this pointer

是的,你可以做到。但请注意,这只是一个指针声明。您必须将它分配给有意义的东西才能实际使用它。

My question is.. when we just declare a variable, does memory not get assigned right away.. or what's the difference?

实际上,这两种情况都是定义,而不仅仅是声明。

int n;

创建一个未初始化的 int 并自动存储;

int* n;

创建一个指向 int 的指针。它是悬空的,它没有指向有效的内存位置。

int* n = new int;

创建一个指针并将其初始化为包含未初始化的 int 的有效内存位置。

int* n = new int();

创建一个指针并将其初始化为包含值初始化的 int(即 0)的有效内存位置。

关于c++ - 在 C++ 中声明变量与动态分配内存给变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10823454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com