如何通过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
相关产品推荐
相关产品推荐

