1、结构体:
用于存储不同数据类型的多个相关变量,从而形成一个具有独立性的组合数据类型。
结构体的声明:
struct 结构体类型名{
数据类型 成员1;
数据类型 成员2;
数据类型 成员3;
………
};//注意此处的分号
声明:创建了一种自定义的数据类型,这种类型叫做<struct 结构体类型名>è数据类型;
struct student(){
char name[32];
int age;
char sex;
double score;
};
struct student è 自定义一个数据类型
定义结构变量:
struct studet 结构体变量名;
struct studet stu;
初始化:
struct student stu ={ “zhangsan”,18 ,’M’,88.8};
使用:
结构体变量名.成员名:--> 数组名[下标]
stu.age -->18;
赋值:
给结构体内容赋值时,只能一个一个成员的去赋值,
但是可以相同类型的结构体之间可以直接赋值。
结构体指针:
struct student *p;
使用指针来进行获取数据
(*p).sex --> ’m’ //基本不用
p->sex --> 'm’ //使用这个
/*===============================================
* 文件名称:struct_KT.c
* 创 建 者:WM
* 创建日期:2023年08月15日
* 描 述:结构体基础知识
================================================*/
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
typedef struct student
{char name[32];int age;char sex;double score;
}stu,*pstu;int main(int argc, char *argv[])
{// stu s1={"zhangsan",18,'m',88.8},s2;//s2=s1;// strcpy(s2.name,"lisi");// s2.age=19;// s2.sex='w';// s2.score=29.0;stu s3;scanf("%s",s3.name);scanf("%d",&s3.age);//scanf("%*c%c",&s3.sex);//方法1、去除脏字字符'\r'回车getchar(); //方法2、去除脏字字符'\r'回车,放在输入数据之前scanf("%c",&s3.sex);scanf("%lf",&s3.score);//结构体指针pstu p=&s3;printf("%s,%d,%c,%.2lf\n",s3.name,s3.age,s3.sex,s3.score);printf("%c\n",p->sex);pstu k=(struct student *)malloc(sizeof(stu));strcpy(k->name,"wangwu");puts(k->name);free(k);return 0;
}
2、结构体大小:
- 使用结构体成员中最大的数据类型的长度来对齐。一个成员不会分到多个格子里。
- 从上到下开始对齐运算。只会放到自己数据类型大小的倍数的位置上。
- 数组相当于写了一堆对应类型的变量。
1111
1011
1000
所以为12
1111 1111
1111 1111
1111 1110
1100 0000
1111 1111
所以为40