这个指针到底是怎么回事
What's actually going on with this pointer
这是我的困惑开始的地方,所以首先声明一个空指针。然后执行选择,运行给定的任何输入,然后出现函数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();
这是修改了指向现在真实对象的曾经为null的指针,还是生成了一个全新的对象?我很困惑这一切是如何联系在一起的。功能中还有第二个
Monster* monster = 0;
这个是在哪里使用的,它是如何返回到遇到的调用函数的。我意识到它以某种方式通过指针返回,但肯定需要一些清晰度
发布的代码中的注释如果不是不言自明的话,那就什么都不是了。
调用方只是从一个最初为NULL(0)的Monster
指针开始(故意不指向对象),如果selection
是1
,则为其分配来自checkRandomEncounter()
的返回值。如果该函数返回非空地址,则表示已返回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++中的基本指针细微差别。
最后,如果变量名称让您感到困惑,那么知道主代码中的monster
指针变量与checkRandomEncounter()
中的变量无关有帮助吗?除了后者用于计算由于代码结构而最终将分配给前者的返回值外,它们是完全不相关的不同指针。
您需要返回if的另一侧的指针(或者您没有包括我认为是的最后两行
return monster;
}
来自gameMap.checkRandomEncounter方法。
此外,你不应该用这种方法打印东西——只需专注于检查是否触发了遭遇战,然后这会影响游戏的流程。
- 使用递归的数组的最小值.这是怎么回事
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 绕道重铸瓷砖层是怎么回事
- 架 (U+67B6) 与en_US不符.UTF-8.这是怎么回事?
- R 中的算术在数字上比整数更快。这是怎么回事?
- 我的代码运行良好,但现在当尝试将其制作成模板时,我遇到了许多看似无关的错误。这是怎么回事?
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 弄清楚这段代码是怎么回事(递归下降案例研究)
- 分配器密集和稀疏是怎么回事?
- 传递引用C++,指针的向量.这是怎么回事?
- __vector_base_common是怎么回事?
- (对象)不命名类型.怎么回事
- 变量已在 .obj 中定义;这是怎么回事?
- Sublime上的EasyClangComplete是怎么回事?
- 重复输出的类型是怎么回事,它如何区分迭代次数和 Ascii 代码?
- 标准::地图使用.这是怎么回事?核心转储?我做得不正确?
- llvm libcxx的源代码是怎么回事?
- 这个指针到底是怎么回事
- 不删除指针?怎么啦?这是怎么回事?