您的位置:首页 > 其它

C 结构体嵌套一级指针 二级指针 动态分配内存

2016-05-10 16:54 225 查看
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//结构体嵌套一级指针 二级指针 动态分配内存
typedef struct _Teacher {
int age;
int id;
char *title;
char **pStuarray;
char name[64];

}Teacher;
//打印结构体
void printfTeacher(Teacher *array,int num) {
int i = 0;
for ( i = 0; i < num; i++)
{
printf("%d\n", array[i].age);
printf("%s\n",array[i].pStuarray[i]);
}

}
//给结构体分配内存
Teacher* createTarray(int num) {
int i = 0,j=0;
Teacher* teacher;
teacher = (Teacher*)malloc(sizeof(Teacher)*num);
if (teacher!=NULL)
{
for ( i = 0; i < num; i++)
{
teacher[i].title = (char*)malloc(sizeof(char)*100);//结构体Teacher title分配内存
char** ptmp = (char**)malloc(sizeof(char*)*num);//
for ( j = 0; j < num; j++)
{
ptmp[i] = (char*)malloc(100);//
}
teacher[i].pStuarray = ptmp;
}
}
return teacher;
}
//释放内存
void freeTeacher(Teacher* arrayT,int num) {
int i = 0,j=0;
if (arrayT!=NULL)
{
for (i = 0; i < num;i++) {
if (arrayT[i].title != NULL) {
free(arrayT[i].title);
}
if (arrayT[i].pStuarray!=NULL)
{
for (j = 0; j < num; j++)
{
free(arrayT[i].pStuarray[j]);
}
}
free(arrayT[i].pStuarray);
}

free(arrayT);
}

}

void main() {
int i = 0,j=0;
Teacher *pArray=NULL;
int num = 1;
pArray = createTarray(num);

for (i = 0; i < num; i++)
{
printf(" %d---age?\n", i + 1);
scanf("%d", &pArray[i].age);
printf(" %d---title?\n", i + 1);
scanf("%s", pArray[i].title);
printf(" %d---name?\n", i + 1);
scanf("%s", pArray[i].name);

for (j = 0; j < num; j++)
{
printf(" ---student----%d\n",i+1);
scanf("%s", pArray[i].pStuarray[j]);
}
}
printfTeacher(pArray,num);

freeTeacher(pArray, num);
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  结构 指针 内存