1.定义结构体类型的原因

通过以学的东西很难满足我们的需要

没有办法表示这些数据的内在联系,数组只能存放同一类型的数据。

C语言允许用户自己建立有不同类型数据组成的组合型的数据结构,它称为结构体,也可以称为记录。

2.定义

  struct 结构体名

 {

成员列表

}结构体变量={初始化};
 

3.     struct声明结构体类型的关键字,不能省略  

        结构体名又可以称为结构体标记

        成员可以属于另一个结构体

        结构体变量与类型的区别:

                                    只能对变量赋值、存取或运算,而不能对一个类型赋存取或运算。在编译时只对变量分配空间。

        成员名可以与变量名相同

        “   .   ”成员运算符

eg:

typedef struct MyBoyFriend
{
    int age;
    char *name;
}boy;
void Show(boy *p,int len)
{
    for(int i = 0;i < len;i++)
    {
        printf("%d,%s ",p[i].age,p[i].name);
    }
    printf("\n");
}
int main()
{
    boy bb[2] = {{18,"luhan"},{21,"wuyifan"}};
    bb[1].name = "caocao";
    int len = sizeof(bb)/sizeof(bb[0]);
    Show(bb,len);
    return 0;
}

4.课堂笔记

结构体:聚合类型 (不能整体赋值)      AAa
定义  struct A{属性}结构体变量;
             结构体名(可有可无)
             {不能赋初值}
    struct A Aa结构体变量
    Aa.a=10;   赋值
    在c++中空的结构体大小为1            .cpp
      c    不支持定义一个空的结构体     .c
      typedef给类型取别名  变量提升为类型
      typedef int INT
      INT a=10;
      考点:#define 与typedef, const区别  课件
      static  extern
      ->指向符  Bb.b->a = 100;//指向符用的时候,取决于前面的操作数是否为指针类型
      . ->
      变量访问元素用.
      ->也相当于解引用->类似(*)
      p[i].age
      浅拷贝(都变)深拷贝(副本改变而已)
      声明不定义变量不占内存
      

5.重难点:结构体的大小

      内存对齐(最大的)      向后对齐
      下标除字节   没余数  考虑下次循环同样也要对齐(读取两次)
      从里往外看,和最大的对齐

struct A
{
    char a;//1+3
    int b;//4  内存对齐
};
struct B
{
    char a;//1+1
    short sh;//2
    int b;//4  内存对齐
};
struct C
{
    char a;//1+3   0--3
    int b;//4          4--7
    short c;//2    //8-15 
    double d;//8
};
struct D
{
    char a;//1
    char b;//1
    short c;//2
    int d;//4
};
struct E
{
    char a;//1+1
    short c;//2
    char b;//1+3
    int d;//4
};
struct F//向后对齐
{
    int a;//4
    char b;//1+3
};
struct G
{
    char a;//1+3
    //char *p;//4
    struct H
    {
        char b;//1+3
        float c;//4
    }h;//8
};

结构体 自己归纳
      

相关文章: