结构体数组
#include<stdio.h>
struct student
{
	char name[20];
	int age;
	int scores[3];
	char addr[50];
};
int main()
{
	struct student stu={"林冲",30,100,100,100,"汴京"};
	struct student* p;
	p=&stu;
	//printf("%s\n",(*p).name);
	//printf("%d\n",(*p).age);
	//结构体指针->成员
	//结构体变量.成员 
	printf("%s\n",p->name);
	printf("%d\n",p->age);
	printf("%d\n",p->scores[0]);
	printf("%d\n",p->scores[1]);
	printf("%d\n",p->scores[2]);
	printf("%s\n",p->addr);
	return 0;
}
结构体指针:
 先申请结构体大小的内存,在分别对结构体中指针类型申请对应的内存
 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student stu;
//结构体为指针类型 
struct student 
{
	char* name;
	int age;
	int* score;
	char* addr;
};
int main()
{
	//通过结构体指针操作堆空间
	stu* p=(stu*)malloc(sizeof(stu)*3);
	for(int i=0;i<3;i++)
	{
		//(p + i)->name;
		p[i].name=(char*)malloc(sizeof(char*)*10);
		p[i].score=(int*)malloc(sizeof(int*)*3);
		p[i].addr=(char*)malloc(sizeof(char*)*50);
	}
	for(int i=0;i<3;i++)
	scanf("%s %d %d %d %d %s",p[i].name,&p[i].age,&p[i].score[0],&p[i].score[1],&p[i].score[2],p[i].addr);
	printf("************************\n");
	for(int i=0;i<3;i++)
	{
		printf("%s ",p[i].name);
		printf("%d ",p[i].age);
		printf("%d ",p[i].score[0]);
		printf("%d ",(p+i)->score[1]);
		printf("%d ",(p+i)->score[2]);
		printf("%s \n",(p+i)->addr);
	}
	//释放堆空间
	for(int i=0;i<3;i++)
	{
		free(p[i].name);
		free(p[i].score);
		free(p[i].addr);
	 } 
	 free(p);
	return 0;
}




















