结构体内存分配
struct student
{
int num;
char addr[10];
int age;
char name[10];
}stu;
int num 占4字节, 正好一个字长32位
char addr[10]; 占12个字节,为addr分配10个字节,剩下2 个字节无用,因为下次分配从字长边界开始
int age; 占4字节, 正好一个字长32位
char name[10]; 占12个字节,为addr分配10个字节,剩下2 个字节无用,因为下次分配从字长边界开始
10*2+4*2+2*2=32
struct student
{
int num;
int age;
char addr[10];
char name[10];
}stu;
int num;占4字节, 正好一个字长32位
int age;占4字节, 正好一个字长32位
char addr[10];
char name[10];后面两个加起来正好20字节,为字长倍数,正好对齐
10*2+4*2=28
结构体声明的时候,变量的排序会直接影响到内存的分配,应尽量把变量字节大的放在前面
动态分配内存空间
struct student *pstrStu;
int g; /*要分配内存的个数*/
/*分配内存*/
pstrStu = (struct student*)malloc(sizeof(struct student)*g)
/*操作*/
.......
/*操作完成,释放内存*/
free(pstrStu);
还有new delete,记住要成对出现
cout<<"Input student num:"
cin>>g;
student *Students = new tudent[g];
for(int i=0;i<g;i++)
{
cin>>Students.name;
cin>>Students.age;
cin>>Students.c;
cin>>Students.en;
cin>>Students.score;
}
...
delete []Students;