我只是在声明一个变量之间的区别时有点困惑,例如:
int n;
Run Code Online (Sandbox Code Playgroud)
并使用"new"动态地将内存分配给变量,例如:
int m = new int;
Run Code Online (Sandbox Code Playgroud)
我注意到只是在处理一个简单的链表项目时,当我以节点对象的形式插入一个新值时,我必须动态创建一个新的节点对象并将所需的值附加到它,然后将其链接到我列表的其余部分.但是..在同一个函数中,我可以定义另一个节点对象,例如.NodeType*N. 并使用此指针遍历我的列表.我的问题是..当我们只是声明一个变量时,内存是不是立刻被分配了......或者有什么区别?
谢谢!
首选可能的自动存储分配变量:
int n;
Run Code Online (Sandbox Code Playgroud)
过度
int* m = new int; // note pointer
Run Code Online (Sandbox Code Playgroud)
在您的情况下优先考虑动态分配的原因是链接列表的定义方式.即每个节点都包含指向下一个节点的指针(可能).由于节点必须存在于创建它们之外的点,因此它们是动态分配的.
NodeType*N. 并使用此指针遍历我的列表
是的,你可以这样做.但请注意,这只是一个指针声明.您必须将其分配给实际使用它的有意义的东西.
我的问题是..当我们只是声明一个变量时,内存是不是立刻被分配了......或者有什么区别?
实际上,两种情况都是定义,而不仅仅是声明.
int n;
Run Code Online (Sandbox Code Playgroud)
创建一个未初始化int的自动存储;
int* n;
Run Code Online (Sandbox Code Playgroud)
创建一个指针int.这是悬空,它没有指向有效的内存位置.
int* n = new int;
Run Code Online (Sandbox Code Playgroud)
创建一个指针并将其初始化为包含未初始化的有效内存位置int.
int* n = new int();
Run Code Online (Sandbox Code Playgroud)
创建一个指针并将其初始化为包含值初始化int(即0)的有效内存位置.