结构体:将不同类型的数据组合成一个有机的整体,以便引用;结构体中的元素也可以为结构体类型的
for exmple :
num name sex age score addr
10010 LiFei M 18 87.5 Beijing
声明一个结构体变量的形式 :
struct 结构体名称
{成员列表};
结构体元素的输出:
结构体变量名.成员名
结构体初始化:
#include
int main()
{
struct student {long int num;char name[20];char sex;char addr[20];}
a={980310,"lilin",'M',"123Road"};
printf("%d\n%s\n",a.num,a.name);
return 0;
}
输出结果;
结构体数组的定义:
sturct student
{int num;char}
#include
int main()
{
struct student {long int num;char name[20];char sex;char addr[20];};
struct student stu[3];
}
#include
#include
struct person {char name[20];int count;};struct person leader[3]={{"Li",0},{"zhang",0},{"Fun",0}};//另一种结构体的定义形式
//等价于 struct person {char name[20];int count;} leader[3]={{"Li",0},{"zhang",0},{"Fun",0}};
int main()
{
int i,j;
char leader_name;
for (i=1;i<=10;i++)
{
scanf("%s",leader_name);
for (j=0;j<3;j++)
{
if (strcmp(leader_name,leader[j].name)==0)
{leader[j].count++;}
}
printf("\n");
for (i=0;i<3;i++)
printf("%s:%d\n",leader[i].name,leader[i].count);
}
return 0;
}
结构体指针变量
#include
#include
int main()
{
struct student {long num;char name[20];char sex;float score;};
struct student stu_1;
struct student *p;//定义指向结构体的指针变量
p=&stu_1;
stu_1.num=888888;
strcpy(stu_1.name,"Li lin");//字符串赋值只能用strcpy,不能用=
stu_1.sex=' M';//这个可以直接用=赋值
stu_1.score=99;
printf("%d\n%s\n%c\n%f",(*p).num,(*p).name,(*p).sex,(*p).score);
return 0;
}
共用体定义:
使不同的数据类型的变量存放在同一段内存单元中,相互覆盖,使几个不同的变量公占同一段内存的结构,但是都从同一个地址开始存放的。如定义了一个共用体a,他的地址和他的各个成员地址都是同一地址。&a,&a.f,&a.c ,&a.i 都是同一地址。
它与结构体根本不同是在内存中的存入方式不同。结构体变量所占内存长度是各成员占的内存长度之和,共用体变量占的内存长度等于最长的成员长度。
#include
#include
struct {int num;char name[10];char sex;char job;union {int class;char position[10];}category;}person;
int main()
{
int n,i;
for(i=0;i<2;i++)
{
scanf("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);
if (person[i].job=='s') scanf("%d",&person[i].category.class);
else if(person[i].job=='t') scanf("%d",&person[i].category.position);
else printf("error input!!\n");
}
printf("The following is the content of information\n");
printf("No Name sex job class/position\n");
for (i=0;i<2;i++)
{if(person[i].job=='s') printf() }//后面的懒得写了
return 0;
}