自定义数据类型上——结构体

自定义数据类型

C语言中的自定义数据类型(用户自己建立的)有:数组类型,结构体类型,共用体类型,枚举类型。

结构体struct

1.定义:由不同类型数据组成的组合型的数据类型。

 struct 结构体名  

{      

        结构成员;

 }

 struct Student  //定义一个名字为Student的结构
 {
     int ID;
     char name[10];
     float score;        //他们有以上信息
 };
 //写变量并赋值,{}里面一一对应输入信息
     Student aa={1,"小明",70f};
 //怎么访问定义的结构体变量里面的成员:变量名.成员,例:
     aa.ID=10;
 //aa.name="小明"; 这样是不行的,因为数组
     strcpy(aa.name,"小明");   //这样是对的,注意要有库使用

typedef 给类型取别名

 typedef int 整型;
 ​
 typedef struct Hero
 {
     int a;
     int b;
 }hero;  //别名hero
 //使用
 int main()
 {
     hero xx={7,5};
     xx.a=7;
    
     hero arr[3]={
         {10,4},
         {9,6},
         {17,0}
     };    
     printf("%d\t%d\n",arr[0].a,arr[0].b);    
 }
 //输出结果:10   4
 //要输出所有值可以使用for循环
 for (int i=0;i<3;i++)
 {
     printf("%d\t%d\n",arr[i].a,arr[i].b);
 }

定义结构体的时候没写结构名,那么typedef给这个结构体取别名

 typedef struct
 {
    …… 
 }STT;   //STT为结构名

直接定义多个变量

 struct 
 {
   ……  
 }s1,s2,s3[10];  //此情况(没有结构体,没有typedef)下,s1,s2,s3[10]均为变量

结构体的嵌套

 struct A
 {
     int a;
     struct
     {
         int b;
     }c;
 };
 //要访问b
 int main()
 {
     A ss;
     ss.c.b;
 }

结构体内存计算方法

内存对齐标准:以该结构体中最大的基本数据类型所占的内存进行对齐。

 struct one
 {
     int a;
     int b;
     char c;
 };
 int main()
 {
     printf("one的字节数为%d\n",sizeof(one));
 }
 //结果12,分析:int为最大是4字节,一共有3个数据,所以3*4=12
 ​
 struct two
 {
     int a;
     char b[10];
     float c;
 };
 int main()
 {
     printf("two的字节数为%d\n",sizeof(two));
 }
 //结果20,分析:其中最大字节是4,其中a、c分别占4字节,char b[10]原本占10字节,但是根据标准:要以4字节4字节占,所以数据以4、4、2分在3个4字节框中,综上所述:4*5=20
 ​
 struct three
 {
     double a;
     int b;
     char c[10];
 };
 int main()
 {
     printf("three的字节数为%d\n",sizeof(three));
 }
 //结果24,分析:最大double为8字节,int是4字节在存完b后,还剩4字节,将c的前4个放进去,之后c还剩6个,但因为标准,所以是8字节,综上所述:3*8=24
 ​
 当数据成员前面有更大的数据类型所占内存,先按照顺序进行最大的数据类型进行内存分配对齐,如果在最后还有比前面更大的基本数据类型所占内存,那么就按照更大的进行对齐。
     char a;
     int b;
     char c[10];
     double d;
     //占32字节

2.作用:更方便的存储各种各样的信息。

 

你可能感兴趣的:(数据结构,c语言,学习,笔记)