指向 C++ 中结构的指针数组
pointer array to structure in C++
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->regno
或Ereg->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])
这也很好用。
相关文章:
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空