我有一个练习,使用函数将数据写入动态结构表。这是我的代码:
#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 - 当我将指向表格的第一个元素的指针插入函数,然后我可以使用索引操作整个表格时,怎么可能呢?
答案 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[]
将其释放。所以是的:没关系!