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

C++结构体中动态数组元素的正确赋值语法求助

结构体堆数组元素的赋值方法

你的Student结构体中,testScores是指向堆上分配数组的指针,操作它的语法和普通数组/指针完全一致,不需要用你注释里的.*写法,以下是两种正确的赋值方式:

1. 下标法(最直观推荐)

直接通过数组下标访问元素赋值,注意数组索引从0开始(不是你注释里的1):

Student s;
// 给第一个测试分数赋值
s.testScores[0] = 85;
// 给第二个测试分数赋值
s.testScores[1] = 92;
// 以此类推,直到索引为 TESTS-1 的元素

2. 指针偏移法

利用指针算术运算访问元素,通过解引用偏移后的指针赋值:

Student s;
// 等价于 s.testScores[0] = 78
*(s.testScores + 0) = 78;
// 等价于 s.testScores[1] = 88
*(s.testScores + 1) = 88;

你之前尝试的<variableName>.*(testScores + 1)是错误的,.*是用于指向成员的指针的操作符,而这里testScores是结构体的普通成员指针,直接用变量名.testScores就能拿到指针地址,再做偏移和解引用即可。

额外注意事项

  • 确保TESTS是已定义的常量,比如提前写#define TESTS 5或者const int TESTS = 5;,否则new int[TESTS]会编译报错。
  • 堆分配的内存必须手动释放,避免内存泄漏:当不再使用Student对象时,执行delete[] s.testScores;来释放数组内存。
  • 每个Student对象的testScores都是独立的堆数组,多个对象需要分别释放对应的内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:02:57