使用指针

时间:2016-01-24 22:33:15

标签: c++ pointers dynamic struct

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

#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的索引语法。我总是使用像这样的指针处理表:{for循环中的*(table+i)*(t+i).name不起作用。我可以使用指针迭代结构字段吗?

P.S - 我是否正确释放了内存?

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

1 个答案:

答案 0 :(得分:1)

标准定义下标如下:

  

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

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

P.S。:如果您使用new[...]分配表格,则必须使用delete[]将其释放。所以是的:没关系!