c++ - 如何动态分配涉及指针的结构?

标签 c++ arrays struct

我正在使用包含三个字段的 Student 结构。然后我在 main 中声明一个指向 Student 结构的指针。然后我将该指针传递给一个函数。此函数计算文件中有多少行,然后动态分配 Student 数组,使其大小与文件中的行数相同,然后将数据读入数组。我坚持动态分配 Student 数组,因为函数参数涉及指向结构的指针。

因为函数参数是一个指向结构的指针,如果我做 pointer = new Student[record]; 会起作用吗?我不知道这是否是您动态分配 Student 数组的方式,使其大小与文件中的行数相同。函数参数中的指针让我感到困惑。

struct Student
{
string name;
double gpa[NUM_OF_QUARTERS];
double average;
};

bool fillArr(Student* pointer);

int main()
{

Student* ptr;

if (!fillArr(ptr))
    return 1;

return 0;
}

bool fillArr(Student* pointer)
{

ifstream infile;
infile.open("student_records.txt");
if (!infile)
{
    cout << "Error opening file\n";
    return false;
}   
int record = 0;
string str;
while(getline(infile, str))
    ++record;
cout << "number of lines in the file " << record << endl;
infile.clear();
infile.seekg(0, ios::beg);

pointer = new Student[record];  // Is this how you would dynamically allocate the Student array?
// after dynamically allocating Student array, read in the data from the file
}

最佳答案

您的方法部分可行,但我宁愿使用 std::vector<Student>为了那个原因。如果你真的想花哨,你可以使用 std::vector::emplace_back()函数以避免构建 Student 的开销首先,然后将其复制到 std::vector 中与 std::vector::push_back() .您可以找到非常好的描述和示例 here ,它使用类型 President而不是 Student .

签名应该是bool fillArr(Student *&pointer)如果你想在 main() 中使用新创建的数组.

如果你通过 ptr变量“按值”到 fillArr() , ptrmain()不会改变,因为pointerfillArr()包含 ptr 的值在函数调用时。这发生在函数签名上

bool fillArr(Student *pointer)

如果您改为“通过引用”传递它,pointerfillArr()将引用您在 main() 中传递的变量.这发生在建议的函数签名中

bool fillArr(Student *&pointer)

关于c++ - 如何动态分配涉及指针的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35096697/

相关文章:

c++ - 如果析构函数有副作用并且对象是从另一个静态对象的析构函数访问的,如何进行静态反初始化?

javascript - 当变量选择数组中的元素时,为什么 Node 看不到该元素?

arrays - 有条件地减少 Mongo 聚合中的两个数组字段

c - 动态内存分配以反向打印 float 数组

python - 使用 Python 类作为数据容器

尝试编译程序时c++未解析的外部符号

c++ - 如何在 C++ 中对映射中的值进行排序

c++ - 具有虚拟类的 unique_ptr

c# - Json.net 仅序列化数组的一部分

c++ - 结构转换为原始字符问题