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

如何通过C++指针修改其指向的State对象中的Player值?

正确修改指针指向的State对象中Player值的方法

你遇到的问题核心是指针解引用和数组访问运算符的优先级混淆,加上对std::array的指针访问逻辑不熟悉。咱们一步步拆解清楚:

先分析你的错误写法

你尝试的几种方式都存在问题:

  • s[row][col] = player;:这里把State* s当成了State类型的数组指针,s[row]等价于*(s + row),会去访问当前State对象内存地址之后的第row个State(完全不是你要修改的单个对象内部的嵌套数组),逻辑完全错误。
  • *s[row][col] = player;:同样先错误计算了s[row],而且Player不是指针类型,对它用*解引用是非法的,要么编译报错要么运行崩溃。
  • s->[row][col] = player;:语法错误,->运算符后面必须跟成员名称,不能直接接[]。

正确的指针访问写法

因为std::array的operator[]是成员函数,你需要先解引用指针得到真正的State对象,再访问它的嵌套数组。由于[]的优先级比*高,必须给解引用操作加括号:

void Set(State *s, int col, int row, Player player) {
    // 先解引用指针获取State对象,再访问[row][col]对应的Player
    (*s)[row][col] = player;
}

你也可以用->直接调用std::array的operator[]成员函数(这种写法可读性稍差,但逻辑等价):

s->operator[](row)[col] = player;

额外建议:用引用替代指针更安全

如果场景允许,建议把函数参数改成State& s(引用类型),这样代码更简洁,还能避免空指针风险:

void Set(State &s, int col, int row, Player player) {
    s[row][col] = player; // 直接访问,无需手动解引用
}

内容的提问来源于stack exchange,提问作者Koenzk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:56:37