显示结构的指针数组

时间:2013-05-17 21:04:43

标签: c++ pointers struct

描述:编写一个程序,创建一个结构,这些结构的数组,以及指向结构数组的每个元素的指针数组,然后使用指针数组从数据文件中读取信息,然后打印出各种信息,详情如下

  1. 结果将输出到屏幕

  2. 数据文件有10行,每行有一个名称和一个年龄。

  3. 您必须定义一个名为personInfo的结构,其中包含2个元素

  4. 一个。一个名为name

    的字符串

    湾一个名为age的int

    1. 定义一个名为people的personInfos数组。

    2. 定义一个名为personPtr

    3. 的personInfos指针数组
    4. 将personPtr的元素设置为人物元素的地址

      即。 personPtr的第一个元素将是人们第一个元素的地址

    5. 使用成员访问操作符箭头和指针数组,读入10个名称和年龄

    6. 使用指针数组显示指针数组的每个元素的名称,年龄,地址以及人物数组的每个元素的地址

    7. 当前代码:

      #include <iostream>
      #include <fstream>
      #include <string>
      #include <iomanip>
      
      using namespace std;
      
      struct personInfos
      {
          string name;
          int age;
      } people[9];
      
      int main()
      {
          personInfos *personPtr;
          personPtr = new personInfos[9];
      
          int i;
          for( i=0; i<10; i++ )
          personPtr[i] = &people[i];
      
      ifstream input;
      input.open("C:\\Users\\jacob\\Google Drive\\Lab9");
      
      for( i=0; i<10; i++ )
      {   
          input >> personPtr[i]->name;
          input >> personPtr[i]->age;
      }
      
      
      
      input.close();
      return 0;
      }
      

1 个答案:

答案 0 :(得分:1)

首先,虽然看起来很聪明,但在声明struct时不要声明变量。它不仅令人困惑,而且在这种情况下它会创建一个全局变量(这是非常错误的)。此外,虽然数组元素的索引是0到9,但是当声明数组时,必须声明元素的数量,在本例中为10。

第二个“personInfos * personPtr”不是一个指针数组,它是一个简单的指针。要创建指针数组,请使用“personInfos * personPtr [10]”。你好像混淆了一个指针可以用作数组的事实,但是问的是,你必须创建一个指针数组。

因此,通过这些更改,这应该工作(现在无法测试):

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

using namespace std;

struct personInfos
{
    string name;
    int age;
};

int main()
{
    personInfos people[10];
    personInfos* personPtr[10];

    int i;
    for( i=0; i<10; i++ )
       personPtr[i] = &people[i];

    ifstream input;
    input.open("C:\\Users\\jacob\\Google Drive\\Lab9");

    for( i=0; i<10; i++ )
    {   
        input >> personPtr[i]->name;
        input >> personPtr[i]->age;
    }    

    input.close();
    return 0;
}