使用指针处理结构的动态表

Handle a dynamic table of structures with pointers

本文关键字:动态 结构 处理 指针      更新时间:2023-10-16

我有一个练习,使用函数将数据写到动态结构表中。这是我的代码:

#include <iostream>
#include <cstdlib>
using namespace std;
struct student{ char name[15], surname[20]; int age; };
student * createTab(int tsize)
{
    student *t = new student[tsize];
    return t;
}
void fill(student *t, int tsize)
{
    for (int i = 0; i<2; i++)
    {
        cout << "Enter a name: "; cin >> t[i].name;
        cout << "Enter a surname: "; cin >> t[i].surname;
        cout << "Enter age: "; cin >> t[i].age;
    }
}
int main()
{
    student *t = createTab(10);
    fill(t, 20);
    cout << t[0].surname << endl;
    cout << t[1].name << endl;
    system("pause");
    delete[]t;
    return 0;
}

它有效,好吧。但是在这里,fill()函数中,我将索引语法与student[].name一起使用。我总是在带有类似指针的表格上工作:*(table+i)在 for 循环中。 *(t+i).name不起作用。我可以使用指针迭代结构字段吗?

附言 - 我是否正确释放了内存?

我猜 P.S 2 - 当我将指向表的第一个元素的指针插入到函数时,我怎么可能使用索引对整个表进行操作?

该标准对下标的定义如下:

5.2.1/1 (...)表达式 E1[E2] 与 *((E1)+(E2))相同(根据定义)

这就是为什么使用指针t和索引i*(t+i)t[i]是相同的。 在结构字段上下文中,代码的问题是一个优先级问题:您可以编写(*(t+i)).name或更好的(t+i)->name,或者更清晰,就像您所做的那样:t[i].name .

PS:如果你分配了一个带有new[...]的表,你必须用delete[]释放它。 所以是的:没关系!