【问题标题】:pointer array to structure in C++C++中指向结构的指针数组
【发布时间】:2016-05-27 02:42:26
【问题描述】:
int noOfEmployee = 0;
cout << "Enter no. of Employee" << endl;
cin >> noOfEmployee;

Ereg = new EMPLOYEE[noOfEmployee];

string defaultName = "Emloyee";

for(int i = 0; i < noOfEmployee; i++) {
    Ereg->regno = i + 1;
    Ereg->name = defaultName;
}

for(int i = 0; i < noOfEmployee; i++) {
    cout << Ereg->regno << "\t"
         << Ereg->name << endl;
}

delete [] Ereg; //segmentation Fault if [] missed

输出是:

Enter no. of employee
5
5    Employee
5    Employee
5    Employee
5    Employee

如何访问 this 中的数组元素或做类似的事情

Ereg[i]->regno = i;
Ereg[i]->name = defaultName;

【问题讨论】:

    标签: c++ arrays pointers structure


    【解决方案1】:

    您的输出会重复,因为您从不将 Ereg 用作数组,而仅将其用作指向 EMPLOYEE 的指针。

    如何访问数组元素或做类似的事情

    Ereg[i]->regno = i;
    Ereg[i]->name = defaultName;
    

    使用. 而不是-&gt;,因为Ereg[i]struct,而不是指向struct 的指针。

    //segmentation Fault if [] missed
    

    这是意料之中的。您需要[],因为您分配了一个数组。因此,必须使用delete[] 来避免未定义的行为。

    【讨论】:

      【解决方案2】:

      Ereg 指向数组的第一个元素,因此Ereg-&gt;regnoEreg-&gt;name 将始终访问第一个元素。

      如何访问数组元素

      你应该

      for(int i = 0; i < noOfEmployee; i++) {
          Ereg[i].regno = i + 1;
          Ereg[i].name = defaultName;
      }
      
      for(int i = 0; i < noOfEmployee; i++) {
          cout << Ereg[i].regno << "\t"
               << Ereg[i].name << endl;
      }
      

      subscript operator

      顺便说一句

      //如果[]错过了分段错误

      您应该使用delete[] 表示数组new[]d(并使用delete 表示指针newd)。

      【讨论】:

        【解决方案3】:

        感谢您的帮助,

        我刚刚知道了一种方法。

        由于递增结构指针会将其移至下一个结构位置,因此我使用了基本方法。

        (Ereg + i)->regno = i;
        (Ereg + i)->name = defaultname;
        

        而且效果很好。

        【讨论】:

          【解决方案4】:

          这很有趣....

          我也可以这样做以用作数组。

          据我们所知

          *(Ereg + i) = Ereg[i]
          // this is how array works, so I can write this
          
          (Ereg + i) as (&Erg[i])
          

          这也很好用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-04-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-07-16
            • 1970-01-01
            • 2017-06-03
            相关资源
            最近更新 更多