gpt4 book ai didi

c++ - 这个指针到底发生了什么

转载 作者:行者123 更新时间:2023-11-28 06:56:55 25 4
gpt4 key购买 nike

这就是我的困惑开始的地方,所以首先声明了一个空指针。然后执行选择,运行任何输入,然后函数 randomEncounter 出现。

 cout << "1) Move, 2) Rest, 3) View Stats, 4) Quit: ";
cin >> selection;

Monster* monster = 0;
switch( selection )
{
case 1:
gameMap.movePlayer();

// Check for a random encounter. This function
// returns a null pointer if no monsters are
// encountered.
monster = gameMap.checkRandomEncounter();

// 'monster' not null, run combat simulation.
if( monster != 0 )

接下来当函数执行完毕时,是

//refering to the once null pointer and now modifies something real?
monster = new Monster

0 = gameMap.checkRandomEncounter();

或者它没有指向任何东西,而不是实际的零值,并耐心等待有指向的东西?所以

0 = null;

直到函数运行:这是函数

Monster* Map::checkRandomEncounter()
{
int roll = Random(0, 20);

Monster* monster = 0;

if( roll <= 5 )
{
// No encounter, return a null pointer.
return 0;
}
else if(roll >= 6 && roll <= 10)
{
monster = new Monster("Orc", 10, 8, 200, 1,
"Short Sword", 2, 7);

cout << "You encountered an Orc!" << endl;
cout << "Prepare for battle!" << endl;
cout << endl;
}

相遇时也是如此:

monster = new Monster();

这是将曾经为空的指针修改为现在真实的对象,还是创建了一个全新的对象?我很困惑所有这些如何联系在一起。在函数中还有第二个

Monster* monster = 0;

这个用在什么地方,怎么返回到遇到的那个调用函数。我意识到它以某种方式通过指针返回,但绝对需要一些清晰度

最佳答案

发布的代码中的注释如果不是不言自明的话,也没什么。

调用方简单地从一个初始为 NULL(0)(故意不指向任何对象)的 Monster 指针开始,并将 checkRandomEncounter() 的返回值赋给它> 如果 selection1。如果该函数返回一个非空地址,则意味着返回了一个 Monster 并且应采取特定的响应行动。

// Check for a random encounter.  This function
// returns a null pointer if no monsters are
// encountered.
monster = gameMap.checkRandomEncounter();

// 'monster' not null, run combat simulation.
if( monster != 0 ) ...

关于checkRandomEncounter()

if( roll <= 5 )
{
// No encounter, return a null pointer.
return 0;
}

因此,如果掷骰数低于 5,函数将返回一个空指针,否则如果掷骰数介于 6 和 10 之间,则分配一个新的 Monster 并返回指向它的指针。

else if(roll >= 6 && roll <= 10)
{
monster = new Monster("Orc", 10, 8, 200, 1,
"Short Sword", 2, 7);

cout << "You encountered an Orc!" << endl;
cout << "Prepare for battle!" << endl;
cout << endl;
}

虽然没有显示,但最好有一些代码来处理当掷骰数在 11 到 20 之间时发生的情况,我猜它可能会生成不同的怪物类型,每个都有不同的随机范围。 (只是在黑暗中拍摄)。

无论如何,如果有可能或者作者可以更具体地说明正在发生的事情,我很想知道如何做。如果仍然不清楚,在进一步剖析之前,您需要花时间学习 C++ 中基本的指针细微差别。

最后,如果变量 names 让您感到困惑,知道主代码中的 monster 指针变量什么都没有checkRandomEncounter() 中的那个有关吗?除了后者用于计算返回值,最终由于代码结构而分配给前者之外,它们是完全不相关的不同指针。

关于c++ - 这个指针到底发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23037289/

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