指向 C++ 中结构的指针数组

pointer array to structure in C++

本文关键字:指针 数组 结构 C++ 指向      更新时间:2023-10-16
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

如何访问其中的数组元素或执行类似操作

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

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

如何访问这里的数组或做这样的事情

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

使用.而不是->,因为Ereg[i]是一个struct,而不是指向struct的指针。

//segmentation Fault if [] missed

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

Ereg指向数组的第一个元素,因此Ereg->regnoEreg->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;
}

请参阅下标运算符。

顺便说一句,福尔

如果 [] 遗漏,则分段错误

您应该对数组 d 使用 delete[] new[](对指针 d 使用 delete new)。

感谢您的帮助,

我刚才有一种方法可以做到这一点。

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

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

而且效果很好。

这是某种乐趣....

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

众所周知

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

这也很好用。