1.结构体 定义和赋值
struct students
{
//成员列表
char name[21];
unsigned int age;
char tel[16];
float scores[3];
char sex;
}stu = { "尼古拉斯",500,"13888888888",100.0f,200,300,'M' };
int main02()
{
printf("姓名:%s\n", stu.name);
printf("年龄:%d\n", stu.age);
printf("电话: %s\n", stu.tel);
printf("成绩: %.1f %.1f %.1f\n", stu.scores[0], stu.scores[1], stu.scores[2]);
printf("性别: %s\n", stu.sex == 'M' ? "男" : "女");
system("pause");
return EXIT_SUCCESS;
}
2.第二种按照结构体顺序 赋值
struct students
{ //成员列表
char name[21];
unsigned int age;
char tel[16];
float scores[3];
char sex; }
int main()
{
struct students stu = { "尼古拉斯",500,"13888888888",100.0f,200,300,'M' }; }
3.第三种赋值
struct students
{
//成员列表
char name[21];
unsigned int age;
char tel[16];
float scores[3];
char sex;
}
int main()
{
strcpy(stu.name, "谢广坤");
stu.age = 50;
strcpy(stu.tel, "13777777778");
stu.scores[0] = 90;
stu.scores[1] = 80;
stu.scores[2] = 70;
stu.sex = 'F';
}
二.结构体数组
struct stu
{
//成员列表
char name[21];
unsigned int age;
char tel[16];
float scores[3];//scores[0]
char sex;
};
int main04()
{
//结构体数组
struct stu s[2];
for (int i = 0; i < 2; i++)
{
printf("请您输入 姓名 年龄 电话 成绩 性别:\n");
scanf("%s%d%s%f%f%f,%c", s[i].name, &s[i].age, s[i].tel, &s[i].scores[0], &s[i].scores[1], &s[i].scores[2], &s[i].sex);
}
for (int i = 0; i < 2; i++)
{
printf("姓名:%s\n", s[i].name);
printf("年龄:%d\n", s[i].age);
printf("电话: %s\n", s[i].tel);
printf("成绩: %.1f %.1f %.1f\n", s[i].scores[0], s[i].scores[1], s[i].scores[2]);
printf("性别: %s\n", s[i].sex == 'M' ? "男" : "女");
}
system("pause");
return EXIT_SUCCESS;
}
三.堆空间开辟结构体
1.使用malloc创建一个 结构体类型的指针 p ,访问结构体内部数据时,使用 p->name ,而内部name又是一个char类型指针
2.再为name开辟堆内存,再使用strcpy赋值 3.释放时,先释放小的,再释放打大的
struct tec
{
char *name; //4
int age; //4
}t;
int main()
{
struct tec * p = (struct tec *)malloc(sizeof(t));
p->name = (char *)malloc(sizeof(char) * 21);
strcpy(p->name, "牛玲");
p->age = 18;
printf("%s %d\n", p->name, p->age);
if (p->name != NULL)
{
free(p->name);
p->name = NULL;
}
if (p)
{
free(p);
p = NULL;
}
printf("%d\n", sizeof(struct tec *));
system("pause");
return EXIT_SUCCESS;
}
四.结构体嵌套
struct stra
{
int a; //4 4
float b;//4 8
char c;//1 12 9
char arr[7]; //16
double h;//24
}abc;
struct strb
{
struct stra abc;//12 16
short f; //2
char * e; //4
short g;
//double d; //8
};
二.联合体(共用体)
1.求共用体 的sizeof 是看最大的数据类型 2.共用体最后被赋值的数据 c才是准确的 其他的可能被覆盖
union vars
{
double a;
float b;
int c;
}var;
printf("%d\n", sizeof(var)); 8
var.a = 100;
var.b = 3.14;
var.c = 66;
printf("%f\n", var.a); 100.000000
printf("%f\n", var.b); 0.000000
printf("%d\n", var.c); 66
三.枚举
1.默认枚举中的值从0 开始自增 2.如果给red手动赋值 10 那么后面还是依次递增1
enum colors
{
red,bule,yellow,black,white,green
}clo;
int main14()
{
int val;
scanf("%d", &val);
switch (val)
{
case red:
break;
case bule:
break;
case yellow:
break;
case black:
break;
case white:
break;
case green:
break;
default:
break;
}
system("pause");
return EXIT_SUCCESS;
}
四.typedef
简化命名, 起别名
typedef unsigned long long ull;
struct studentsInfoList
{
char name[20];
char sex;
};
typedef struct studentsInfoList sinfo;
int main115()
{
sinfo s1;
ull a = 10;
printf("%d\n", a); 10 }