我正在阅读Lospinoso的“ C ++速成课程”,其中包含以下代码。我不确定“ new_element-> next = next”这一行背后的原因。如果删除它,代码仍然会产生相同的结果。
[将“&trooper2”传递给insert_after方法时,trooper2的“ next”指针是否指向trooper1的“ next”指针指向的位置?当trooper2的下一个指针都已经为空指针时,为什么将它们分配给trooper1的下一个指针?
祝大家节日快乐,谢谢您的帮助
#include <cstdio>
struct Element {
Element* next{};
void insert_after(Element* new_element) {
new_element->next = next;
next = new_element;
}
char prefix[2];
short operating_number;
};
int main() {
Element trooper1, trooper2, trooper3;
trooper1.prefix[0] = 'T';
trooper1.prefix[1] = 'K';
trooper1.operating_number = 421;
trooper1.insert_after(&trooper2);
trooper2.prefix[0] = 'F';
trooper2.prefix[1] = 'N';
trooper2.operating_number = 2187;
trooper2.insert_after(&trooper3);
trooper3.prefix[0] = 'L';
trooper3.prefix[1] = 'S';
trooper3.operating_number = 005;
for (Element* cursor = &trooper1; cursor; cursor = cursor->next) {
printf("Storm Trooper %c%c-%d\n", cursor->prefix[0], cursor->prefix[1],
cursor->operating_number);
}
在此示例中,new_element->next = next;
没有区别,因为在执行函数之前(和之后)两个指针均为空。但是,如果您尝试这样做:
...
trooper1.insert_after(&trooper3);
...
trooper1.insert_after(&trooper2);
...
您会发现有所不同。 With该行,输出将与第一个示例中的相同。 无该行,trooper3
将丢失。
此代码的作用是在调用元素和它指向的元素之间插入一个元素。让我们看看发生了什么:
= trooper1> NULL
= trooper1> trooper2> NULL
= trooper1> trooper2> trooper3> NULL
您正在调用元素和下一个元素之间插入一个已经为NULL的元素。因此,您也将新元素的旁边设置为NULL。