What

结构体数据类型。
相当于一个模板,当程序创建一个结构体变量时,编译器就会按照这个模板里的成员来分配内存空间,并在成员名挂载在结构体变量中。

How

通过struct关键字声明结构体

  1. struct Person //声明一个结构,并标记为Person。简单来说就是声明一个Person结构。这里只是告诉编译器如何表示数据,并没有为数据分配空间
  2. {
  3. // char name[10];//char * str和 char str[10]的区别 前者是结构中只存放地址,不为字符串分配存储空间,适用于另外的地方已经为字符串分配了空间,后者是存储在结构内存,会分配10个字节来存放字符串,然后把静态存储区的字符串复制一份过来。无疑的额外占用内存
  4. char *name;
  5. int age;
  6. };
  7. struct Person person = {"Lingzhi",21};//编译器按照Person这个模板来分配内存空间,并把值存储在内存单元中,同时模板中的成员名也挂载到了结构体变量上
  8. person1.name = "Ling";//通过.的方式 访问元素
  9. person1.age = 20;

char * str和 char str[10]的区别 前者是结构中只存放地址,不为字符串分配存储空间,适用于另外的地方已经为字符串分配了空间,后者是存储在结构内存,会分配10个字节来存放字符串,然后把静态存储区的字符串复制一份过来。无疑的额外占用内存

创建结构体的三种方式

  1. //第一种就是上文的方式
  2. //第二种匿名结构体
  3. struct
  4. {
  5. char *name;
  6. int age;
  7. }person,person1;
  8. //第三种
  9. struct
  10. {
  11. char *name;
  12. int age;
  13. }person2={"Lingzhi",21},person3={"Ling",20};

Why

由于C语言是面向过程编程,没有面向对象的概念。所以我们想要使用对象这种结构的时候,就需要通过结构体。

注意

  1. 声明结构体的时候,编译器并不会分配内存空间,它只是告诉编译器如果表示数据,为结构体变量提供一个模板。只有当定义结构体变量的时候,编译器就根据这个模板来分配内存空间,并把模板中的元素名挂载到结构体变量上。这样结构体变量就可以通过.的方式访问元素。
  2. 因为内存对齐的原因,结构体内的成员即使是一样的数据类型,但是分配出来的结构体的大小是可能会不一样的。