如何为结构数组动态分配内存.... 例如:
class students
{
struct stud
{
int r_no;
char name[20];
}*s;
}
如何为* s动态分配内存......
答案 0 :(得分:5)
首先,这是不这样做的方式,因为你可以使用例如stud的向量。使用您拥有的代码,它将类似于:
class students
{
public:
struct stud ... *s;
students() // ctor
{
s = new stud[100]; // say you have 100 students
// from now on you can use s[0], s[1], etc. in the class
}
};
但是,你应该使用的是一种STL向量或列表:
class students
{
public:
struct stud ... ;
std::vector<stud> my_students;
students() // ctor
{
stud aStudent = {0, "Student Name"};
my_students.push_back(aStudent); // add a new student.
}
};
答案 1 :(得分:2)
为什么在一个只有指针的类中额外包装结构?
无论如何,在C中你会做这样的事情:
struct stud
{
int r_no;
char name[20];
} *s;
size_t num_students = 4711;
s = malloc(num_students * sizeof *s);
然后,谨慎的做法是确保所有这些个性结构都被初始化。
如果你的意思是C ++,你应该编写构造函数来处理它,并使用new []来分配一个结构数组。
答案 2 :(得分:2)
您应该尽可能使用标准组件。这里std :: string和std :: vector可以帮到你。
struct Student
{
int r_no;
std::string name;
};
typedef std::vector<Student> StudentList;
通过这种方法,没有必要想知道如何动态分配内存。一切都得到了照顾!
编辑:
我只是输入定义学生列表,因为对我而言,添加更多功能与问题无关。 显然,最后一行可以用真正的类定义替换:
class StudentList
{
public:
// Add your own functionalities here
private:
std::vector<Student> m_students;
};
答案 3 :(得分:0)
class students
{
public:
students(size_t noOfStudents):m_noOfStudents(noOfStudents)
{
s = new stud[m_noOfStudents];
}
~students()
{
delete s;
}
private:
struct stud
{
int r_no;
char name[20];
}*s;
size_t m_noOfStudents;
}