c++ - 将第二个指针分配给第一个指针指向的对象

标签 c++ pointers

我是 C++ 的新手,我唯一的编程经验是使用 Java。我仍在尝试处理指针。我将如何分配一个指针指向第二个指针指向的同一个对象?具体来说,我想指定 currentPlayer 指向 player0player1,并随着游戏状态的变化来回切换。

using namespace std ;

struct Player {   
public:
    string name ;
    //fields
};

class Game  {
private:
    Player *player0 ; 
    Player *player1 ; 
    Player *currentPlayer ;
    bool player0First ;
    stringstream *gameLog ;
    //more fields

public:
    void play() ;
    void changeGmState(Player*) ;
    //other member functions, etc.
} ;

void Game::play() {
    if (player0First)
        currentPlayer = *player0 ;
    else
        currentPlayer = *player1 ;
    *gameLog << "It's " << currentPlayer->name << "'s turn!" << endl ;
    changeGmState(currentPlayer) ;
    //code
}

play()函数中currentPlayer的赋值是否正确? Xcode 似乎不这么认为,但我仍然对指针赋值和正确使用解引用运算符感到非常困惑。相关问题:此代码会将正确的玩家名称插入到gameLog 中吗?我能否确定将 currentPlayer 传递给 changeGmState() 与传递 player0player1 的效果相同?任何其他反馈表示赞赏。预先感谢您的帮助。

最佳答案

Is the assignment to currentPlayer in the play() function correct?

没有。 C++ 指针语法有点困惑,因为 * 可以表示多种含义。表达式 Player *currentPlayer ; 表示您正在创建一个指向 Player 对象的指针(也就是说,currentPlayer 是一个变量,用于存储 Player 所在的内存地址。当您说 *currentPlayer,这意味着你希望 Player 对象存储在该内存地址(这称为取消引用指针)。说 currentPlayer = *player0 ; 没有什么意义;它说要在只存储内存地址(currentPlayer 指针)的对象中存储一个 Player 对象 (*player0)。如前所述,解决方案是说

currentPlayer=player0;

这基本上意味着“将当前播放器的内存地址设置为与 player0 指向的相同。”您也可以将其视为“使 currentPlayer 指向同一事物 player0 指向。”

关于您的其他问题,

"will this code insert the correct player name into gameLog?"

是的。 *gameLog 正确取消引用 gameLog 指针。

Can I be sure passing currentPlayer to changeGmState will work the same as passing in player0 or player1?

是的,假设 currentPlayer 已设置为 player0player1

关于c++ - 将第二个指针分配给第一个指针指向的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19581695/

相关文章:

c++ - 令人困惑的声明和初始化程序

c++ - 如何在编译时从字符串文字生成整数?

c++ - 当 header 中指定文本/纯文本时,eBay API 返回 JSON

c++ - clang-format:如何对齐结构初始化列表

c - 指向未知大小的现有二维数组的指针?

c - 第一个字节和第一个字节元素地址之间的差异

c++ - std::atomic<int> 上的预增量与后增量

c++ - 将指针传递给函数不返回值

c++ - 回顾我的 C++ 多维数组指针

c++ - 为什么有时将 2D 图像建模为指向指针 (T**) 的指针?