1.结构体:不同类型数组的结合
struct Student //关键字说明是struct,首字母大写
{
int num;
char sex;
double score;
}; //要加分号
2.点运算符来访问结构体中的成员变量(域)
struct Student stu1;
stu1.num = 1;
strcpy(stu1.name,"cwt");
3.选票系统
#include<stdio.h>
#include<string.h>
struct XuanMin{
char name[32];
int tickets;
};
int main()
{
struct XuanMin xm[3];
struct XuanMin max;
int i;
int j;
int len;
int total=5;
char tempName[32];
int mark=0;
int feipiao=0;
len = sizeof(xm)/sizeof(xm[0]);
//初始化选民
for(i = 0; i < len ; i++){
xm[i].tickets = 0;
printf("请输入第%d选民的名字:\n",i+1);
scanf("%s",xm[i].name);
}
//唱票环节
for(i = 0;i<5;i++)
{
mark = 0;
printf("你想要投给谁:\n");
memset(tempName,'\0',sizeof(tempName));
scanf("%s",tempName);
for(j=0;j<len;j++){
if(strcmp(tempName,xm[j].name )== 0)
{xm[j].tickets++;
mark = 1;}
}
if(mark == 0){
printf("无此候选人,弃票\n");
feipiao++;}
}
//结果
for(i=0;i<len;i++)
printf("名字:%s,票数:%d\n",xm[i].name,xm[i].tickets);
max=xm[0];
for(i=1;i<len;i++)
if(max.tickets<xm[i].tickets)
{max = xm[i];}
printf("恭喜%s以%d票当选,废票是%d",max.name,max.tickets,feipiao);
return 0;
}
4.结构体指针
struct Test t1
struct Test *t2=&t1
对于结构体指针来访问其中元素,用->来指向
t1.data
t2->data
5.结构体二级指针
看是否保存的是指针变量地址,若是则为二级指针。
6.联合体/共同体:不同类型的变量共享一个内存空间
结构体元素享有单独空间,联合体元素共享空间,空间由最大的类型确定;
数据赋值会被覆盖。
union TestU{
int a;
double b; //最大内存为8个字节
}
7.枚举类型
变量名无需申请;
赋值名时只能命名为列表中的值;
值默认从0开始;
可以直接忽略枚举类型名,直接定义变量。
enum Weekday {sun,mon,tus,wed,thus,fri,sat};
enum {sun,mon,tus,wed,thus,fri,sat}; //可以不定义类型名使用
enum {sun,mon,tus,wed,thus,fri,sat} w1,w2;
8.typedef
定义关键字
一般与结构体配合使用,避免复杂
typedef int zhengshu;
zhnegshu i;
typedef struct { //可以忽略结构体名
int data;
}T;
T t1;