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
相关产品推荐
相关产品推荐

