#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct date{
int year;
int month;
int day;
};
typedef struct date date_t;
struct student{
char name[20];
int age;
date_t birth_date;
};
typedef struct student student_t;
student_t** get_student_t_array(int *size){
//sizeof(student_t *) is the length of mem to keep the address of a student_t instance
//stu_array_ptr is to keep the array's starting address, each element of the array is a pointer
student_t **stu_array_ptr = (student_t **)malloc((*size) * sizeof(student_t*));
int i;
for(i = 0; i < *size; i++){
stu_array_ptr[i] = (student_t *)malloc(sizeof(student_t));
stu_array_ptr[i]->age = i;
char name_tmp[20];
sprintf(name_tmp, "shanghai_%d", i);
strcpy(stu_array_ptr[i]->name, name_tmp);
stu_array_ptr[i]->birth_date.year = i;
stu_array_ptr[i]->birth_date.month = i;
stu_array_ptr[i]->birth_date.day = i;
}
return stu_array_ptr;
}
int main(void){
int i, size = 10;
student_t **ptr = get_student_t_array(&size);
for(i = 0; i < 10; i++){
printf("name = %s, age = %d, birth_date = {%d, %d, %d}\n",
ptr[i]->name, ptr[i]->age, ptr[i]->birth_date.year,
ptr[i]->birth_date.month, ptr[i]->birth_date.day);
free(ptr[i]);//free each student_t instance
}
free(ptr); //free the pointer array
return 0;
}
结构 与 指针
最新推荐文章于 2022-08-09 06:50:41 发布