使用指针处理结构的动态表
Handle a dynamic table of structures with pointers
我有一个练习,使用函数将数据写到动态结构表中。这是我的代码:
#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[]
释放它。 所以是的:没关系!
相关文章:
- 使用列表进行动态结构分配
- C++:从动态结构数组中删除元素并移动其他元素
- 返回带有动态结构数组的结构结构
- 删除C++中的动态结构
- 动态结构数组错误
- C++ 它没有从文件读回动态结构
- C++中的动态结构中的动态结构
- C++ 赋值动态结构
- 如何在没有指针的情况下返回动态结构
- 用char*构建动态结构的更好方法
- C++从不同的cpp访问动态结构
- 字符串中的动态结构名称
- 将动态结构数组复制到另一个C++中
- 充满动态结构的c++数组
- c++中的动态结构
- C++中的动态结构
- 定义动态结构
- 动态结构体成员在使用 CUDA/NVCC 传递到函数时损坏
- 如何释放动态结构数组的内存
- 需要删除动态结构内容,然后删除结构本身