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

时间:2016-05-27 02:42:27

标签: c++ arrays pointers structure

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

4 个答案:

答案 0 :(得分:1)

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;
}

请参阅subscript operator

顺便说一句

  

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

您应该将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])

这也很好。