df <- structure(list(Date = c("1990 Q1", "Q2", "Q3", "Q4", "1991 Q1",
"Q2", "Q3", "Q4", "1992 Q1", "Q2", "Q3", "Q4"), A = c(2L, 4L,
7L, 5L, 7L, 1L, 7L, 9L, 1L, 4L, 1L, 5L), B = c(3L, 2L, 6L, 3L,
6L, 8L, 6L, 2L, 7L, 6L, 3L, 8L)), .Names = c("Date", "A", "B"
), row.names = c(NA, -12L), class = "data.frame")
输出是:
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
答案 0 :(得分:1)
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;
}
顺便说一句
//分段错误如果[]错过了
您应该将delete[]
用于数组new[]
d(并使用delete
作为指针new
d)。
答案 1 :(得分:1)
您的输出重复,因为您从不使用Ereg
作为数组,仅作为指向EMPLOYEE
的指针。
如何在此处访问数组元素或执行此类操作
Ereg[i]->regno = i; Ereg[i]->name = defaultName;
使用.
代替->
,因为Ereg[i]
是struct
,而不是指向struct
的指针。
//segmentation Fault if [] missed
这是预期的。您需要[]
,因为您分配了一个数组。因此,必须使用delete[]
来避免未定义的行为。
答案 2 :(得分:0)
感谢您的帮助,
我刚才有一种方法可以做到这一点。
增加结构指针会将其移向下一个结构位置,所以我使用了基本方法。
(Ereg + i)->regno = i;
(Ereg + i)->name = defaultname;
它运作得很好。
答案 3 :(得分:0)
这是一种乐趣......
此外,我可以将其用作数组。
我们知道
*(Ereg + i) = Ereg[i]
// this is how array works, so I can write this
(Ereg + i) as (&Erg[i])
这也很好。