当前位置: 首页 > 知识库问答 >
问题:

我不明白为什么这个函数“从列表中返回一个指针”

商运锋
2023-03-14
EnemySpaceShip* getNewEnemy ()
{
    EnemySpaceShip* p_ship = new EnemySpaceShip;
    p_ship->x_coordinate = 0;
    p_ship->y_coordinate = 0;
    p_ship->weapon_power = 20;
    p_ship->p_next_enemy = p_enemies;
    p_enemies = p_ship;
    return p_ship;
}
EnemySpaceShip* addNewEnemyToList (EnemySpaceShip* p_list)
{
    EnemySpaceShip* p_ship = new EnemySpaceShip;
    p_ship->x_coordinate = 0;
    p_ship->y_coordinate = 0;
    p_ship->weapon_power = 20;
    p_ship->p_next_enemy = p_list;
    return p_ship;
}

注意,此函数与getNewEnviron不同,因为它返回一个指向列表的指针,而不是新的敌人。

我不明白的是他所说的“第二个函数返回一个指向列表的指针”和“第一个函数返回新的敌人”是什么意思。我以为他们都创建了一个名为p_ship的新敌人(既是指针又是新敌人)并返回了它。这个说法是什么意思?

共有1个答案

鲁宏爽
2023-03-14

这条线很重要

p_ship->p_next_enemy = p_list;

请注意,p_ship有一个指向p_next_enforme的指针,该指针本身就是enemyspaceship*。因此,如果你不断地调用这个函数,你最终会得到一个链表。您可以从第一个enemyspaceship*开始,并在一个循环中遍历所有这些代码,例如。

EnemySpaceShip* p_ship = p_first_ship;    // assume this was known
while (p_ship->p_next_enemy != nullptr)
{
    p_ship = p_ship->p_next_enemy;
    // p_ship has now advanced one element of your linked list
}

此外,由于添加这些ship的顺序,如果多次调用AddNewEnemyToList,最后一次调用它时,实际上会得到链接列表中第一个ship的指针。这就是为什么作者说“它返回一个指向列表的指针”。

 类似资料:
  • 在f2中,我们有指针 改为func f2(arg int)(int,*error)?或者,在这种情况下,为什么我们返回指针而不是值?

  • 问题内容: 我正在从我的一个类中执行Java二进制文件,并且抛出ClassNotFoundException: Geoline类位于/home/geo/Geoline.java。关键是,无论我位于文件系统中的哪个位置,如果我手动执行相同的命令,都将执行该类。使用Runtime.getRuntime()。exec执行二进制文件时,为什么不会发生相同的事情? 编辑:这是在verbose标记上生成的输出

  • 当用户键入以下内容的答案时:system.out.println(“键入数字”); 它不会继续到我的代码的下一部分。

  • 很抱歉问了一个关于已经讨论过很多次的论点的非常基本的问题,我就是想不出答案。我试着在论坛上搜索已经在主题上提出的问题,但没有找到确切的答案(或者不理解)。 当以不同顺序调用时,为什么此函数会打印两次从i到10的数字?它不应该按同样的顺序打印出来吗?我一直听说递归就是这样工作的:每个函数在其代码中调用另一个相同的函数,只应用于较小的域,直到满足结束条件为止。此时,它应该返回(回溯)到原始函数;这就是

  • 我在构建递归函数时继续遇到一个问题,其中返回的值与我期望返回的值不同。我很确定这与函数的递归性质有关,但我不知道发生了什么。 在这个缩小的例子中,我有一个带有字符串的函数foo和一个默认值为0的int。给定字符串“测试”并且没有整数,我希望递归函数为每个调用增加numberToBack并将新值传递给下一个调用。这一定是部分正确的,因为如果我在到达基本情况时cout numberToBack,我将获

  • 我有一个名为的函数,它将返回一个网站的链接。然后我做一些事情,比如: 找到(找到的是一个列表) 只要爬行返回一个有效的链接,这就可以正常工作,但有时它不会返回任何内容。因此,的值被添加到列表中。 所以我的问题是,是否可以从返回一些不会向列表中添加任何内容的内容?