正在创建指向结构的指针数组

Creating an array of pointers to struct

本文关键字:指针 数组 结构 创建      更新时间:2023-10-16

我很难理解如何创建指向结构的指针数组。我试着在论坛中查找类似的例子和线程,但我仍然无法让我的代码工作!因此,我相信我写了一段丑陋的代码,我不知道哪里出了问题,也不知道如何修复它。这是代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Movie
    {
       string name;
       int numawards;
       int nomination;
       int year;
    };
void *readfile(ifstream &infile, int &n);
int main()
{
    ifstream infile;
    int n = 0;
    infile.open("old_movies.txt");
    Movie *oldmovies;
    oldmovies = readfile (infile, n);
    return 0;
}
//*function documentation//
void *readfile (ifstream &infile, int &n)
{
    infile >> n;
    Movie *movies;
    movies = new Movie[n];
    for (int i = 0 ; i < n ; i++)
    {
        infile >> movies[i]->year >> movies[i]->numawards >> movies[i]->nomination;
        infile.ignore();
        infile.ignore();
        getline(infile, movies[i]->name);
        cout << movies[i]->year << " " << movies[i]->numawards << " " << movies[i]->nomination << " " << endl << movies[i]->name<< endl; //the cout here is to test and see if the code works.
    }
    return movies;
}

这个代码的目的是读取一个txt文件,其中包含电影名称、奖项数量、提名方式和制作年份,然后使用指针打印出来。以下是文件的样子:

2
1935 1 3
The Dark Angel
1935 4 6
The Informer
1935 1 8

前4位代表年份,第二位代表获得奖项的次数,最后一位代表获得提名的次数。

不管怎样,我被困在这一部分,我真的不知道在这里该做什么。我只是希望这个代码不会那么糟糕,以至于有很多东西需要更改。如有任何帮助或建议,我们将不胜感激。

让我们看看这里有什么:

Movie *movies;
movies = new Movie[n];

这将分配一个Movie实例数组。要动态分配指针数组,需要将其更改为

Movie** movies;
movies = new Movie*[n];

现在在for循环中,您需要分配每个Movie实例:

movies[i] = new Movie();

您还应该更改readfile()以返回Movie**而不是void*,这样以后就不必使用任何强制转换。

但是你真的需要一个指针数组吗?为什么不使用structs数组呢。这将避免额外的间接级别,并使您的代码更加简单。