You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中向构造函数传递指针后指针值未改变的问题求助

C++中向构造函数传递指针后指针值未改变的问题求助

我刚学C++,现在试着写一个板球计分程序。目前我已经能从两个文本文件里读取主队和客队的球员名单,这部分跑起来没问题。我还创建了Over(投球轮次)和Ball(单次投球)两个类,Over本质是Ball的vector容器,一般包含6次合法投球。

按照板球的规则,一个投手投完一轮后就得换另一个投手上场;另外,当一次投球的得分是奇数时,当前击球手(striker)和非击球手(non-striker)要互换角色——非击球手变击球手,击球手变非击球手。

现在我卡在一个问题上:我把指向当前击球手和非击球手的指针传给Ball类的构造函数,想在构造函数里处理两人互换的逻辑,但构造函数里修改指针指向后,外部的指针值根本没变化!我本来以为传指针进去就能修改外部的指向,后来改成传指针的引用还是没生效,搞了半天都没摸清楚哪里错了,有没有大佬能帮我看看?

给大家贴一段我大概的代码逻辑,方便排查:

#include <vector>
#include <iostream>
#include <string>
using namespace std;

// 先简化定义Player类
class Player {
public:
    string name;
    Player(string n) : name(n) {}
};

class Ball {
public:
    Ball(Player* striker, Player* nonStriker, int runs) {
        if (runs % 2 != 0) {
            // 尝试互换两个指针的指向
            Player* temp = striker;
            striker = nonStriker;
            nonStriker = temp;
        }
        // 其他投球相关的记录逻辑
    }
};

int main() {
    Player striker("Smith");
    Player nonStriker("Johnson");
    Player* currentStriker = &striker;
    Player* currentNonStriker = &nonStriker;

    // 这次投球得3分,奇数,应该触发互换
    Ball ball(currentStriker, currentNonStriker, 3);

    // 但这里输出的还是Smith和Johnson,根本没互换!
    cout << currentStriker->name << " " << currentNonStriker->name << endl;
    return 0;
}

后来我把构造函数的参数改成Player* &striker和Player* &nonStriker,结果还是不对,这到底是哪里出问题了啊?

备注:内容来源于stack exchange,提问作者eeqesri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:58:14