ListNode的初始化
The initialization of ListNode
我有一个关于 ListNode 初始化的问题,如果我只是宣布一个 ListNode 指针,为什么我不能像代码中显示的那样分配它的下一个值。
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* tmp;
tmp->next = nullptr;// This is wrong, why is that?
ListNode* tmp2 = new ListNode(1);
tmp2->next = nullptr;// This is right, what cause that?
我只是尝试宣布一个 ListNode 指针并将其下一个值分配给 nullptr。但是在我宣布一个具有新功能的指针之后,它就正确了。为什么?
I just try to announce a ListNode pointer and assign its next value to
nullptr
指针没有任何数据成员。它是具有数据成员的 ListNode
类型的对象。
因此您需要一个 ListNode
类型的对象,并使用指向该对象的指针可以将任何值分配给该对象的数据成员 next
。
ListNode* tmp2 = new ListNode(1);
^^^^^^^^^^^^^^ ^^^^^^^^^^^
pointer object
至于这段代码
ListNode* tmp;
tmp->next = nullptr;// This is wrong, why is that?
那么 Listnode
类型的对象都不存在您可以更改的数据成员。此外,由于指针 tmp
未初始化且具有不确定的值,因此使用此类指针访问内存会导致未定义的行为。
指针是一个可以保存对象地址的盒子
ListNode* tmp;
tmp->next = nullptr;// This is wrong, why is that?
您在此处创建了框 (tmp),但未将对象的地址放入其中。
第二行说 - “在 tmp 中存储的地址的偏移量 4 处,请写 0”,好吧,框中没有有效地址,因此失败。
在第二个例子中
ListNode* tmp2 = new ListNode(1);
tmp2->next = nullptr;// This is right, what cause that?
你说
"Please make a new ListNode object"
"Put its address in the box called tmp2"
"at offset 4 from the address stored in tmp2 please write 0"
这可以工作,因为盒子 tmp2 指向某个有效的地方
我有一个关于 ListNode 初始化的问题,如果我只是宣布一个 ListNode 指针,为什么我不能像代码中显示的那样分配它的下一个值。
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* tmp;
tmp->next = nullptr;// This is wrong, why is that?
ListNode* tmp2 = new ListNode(1);
tmp2->next = nullptr;// This is right, what cause that?
我只是尝试宣布一个 ListNode 指针并将其下一个值分配给 nullptr。但是在我宣布一个具有新功能的指针之后,它就正确了。为什么?
I just try to announce a ListNode pointer and assign its next value to nullptr
指针没有任何数据成员。它是具有数据成员的 ListNode
类型的对象。
因此您需要一个 ListNode
类型的对象,并使用指向该对象的指针可以将任何值分配给该对象的数据成员 next
。
ListNode* tmp2 = new ListNode(1);
^^^^^^^^^^^^^^ ^^^^^^^^^^^
pointer object
至于这段代码
ListNode* tmp;
tmp->next = nullptr;// This is wrong, why is that?
那么 Listnode
类型的对象都不存在您可以更改的数据成员。此外,由于指针 tmp
未初始化且具有不确定的值,因此使用此类指针访问内存会导致未定义的行为。
指针是一个可以保存对象地址的盒子
ListNode* tmp;
tmp->next = nullptr;// This is wrong, why is that?
您在此处创建了框 (tmp),但未将对象的地址放入其中。 第二行说 - “在 tmp 中存储的地址的偏移量 4 处,请写 0”,好吧,框中没有有效地址,因此失败。
在第二个例子中
ListNode* tmp2 = new ListNode(1);
tmp2->next = nullptr;// This is right, what cause that?
你说
"Please make a new ListNode object"
"Put its address in the box called tmp2"
"at offset 4 from the address stored in tmp2 please write 0"
这可以工作,因为盒子 tmp2 指向某个有效的地方