C语言中什么是结构体,怎么定义结构体。

    为什么要用结构体?

没有结构体之前,C语言中,数据的组织依靠:变量+数组。最初最简单的时候,只需要使用基本数据类型来定义单个变量,需要几个就定义几个,后来有时候需要很多意义相关的变量这时候数组出现了。数组解决了需要很多类型相同,意义相关的变量问题,但是数组是有限制的,数组的不足在于,一个数组只能存储很多个数据类型相同的变量。所以碰到需要封装几个类型不同变量的时候,数组就无能为力。这时候就需要结构体。

注意:结构体定义在主函数外面

          结构体定义的是一种新的组合类型(例如int double),而不是变量 ,也不消耗内存,可以看成一张造房子用的图纸

          在定义变量的地方,用结构体类型定义变量,
 

#include<stdio.h>

struct Student
{
    char name[20];        //学生姓名
    unsigned int num;     //学号
    int isMale;           //性别
};                        //注意这里的;不能丢
 
int main()

{

    struct Student S1;    //struct Student类型,变量名S1
    
    //给结构体变量赋值
    S1.name[0] = 'J';
    S1.num = 123;
    S1.isMale = i;

    printf("S1.num = %d",S1.num);
    return 0;
}

 什么是结构体?

结构体是一个集合,里面包含许多元素,这些元素的数据类型可以相同,也可以不同。结构体是一种数据封装的方法,

结构体存在的意义就在于,把很多数据类型不相同的变量封装在一起,组成一个打的新的数据类型

      数据结构:把庞大复杂的数据用一定的方式组织管理起来,便于操作(查找,增加,删除等)这就是数据结构。

      结构体和数组的关联:数组是一种特殊的结构体,特殊之处在于封装内的各个元素类型是相同。结构体和数组一般都操作的是其中的子元素,一般不会做整体操作。

      使用结构体的步奏:

1 定义结构体的类型。结构体类型的定义是在函数外面(函数外面 == 全局)的

2 定义结构体变量,使用第一步定义的类型来定义结构体变量

3 使用变量,实际上使用结构体变量的时候,使用的是结构体变量中封装的各个子元素,而不是结构体变量本身。

结构体初始化

      结构体变量如果定义的时候无初始化,则结构体变量中的子元素的值是随机的,初始化时分号不好用

     正确的初始化方式:

struct  Mystruct  s = 
{
    .a = 2,       //一定是用逗号隔开不是分号
    .b = 3,       //一定是用逗号隔开不是分号
    .c = 4,       //一定是用逗号隔开不是分号

};

注意事项

      1  结构体类型的成员可以是另外一个结构体类型的成员

         {

             花括号里面的变量作用域名

         }

     2  结构体类型某个成员是一个指向结构体类型的指针的话这个结构体类型只能是自己不 是其他的(这是死规定)。

     3  只有声明变量时才会分配空间,创建类型相当于构建图纸并不是分配空间。

     4  如果有整型变量,那么struct 中的其他类型变量必须是4个字节:叫字对齐

     5  内存空洞,浪费了其他字节时,改变方法:把相同类型的 变量放在一起,余下的空间不够在分配

     6  半子对齐:结构体中只有 short int 按2个字节对齐, 有整型和短整型按整型对齐;

    使用结构体存在的问题: 内存空洞  字对齐半字对齐


struct node            struct node                 struct node
{char ch;               {                          { 
 int num;                int num;                     char ch;
}; //变量占8个字节         char ch1;                    int num;
                          char ch2;                    char ch1;
                         }; //变量占12个字节             char ch2;
                                                   };  //变量占12个字节
struct node
{char ch;
  char ch1;
  char ch2
}; 变量占3个字节

//int型变量占四个字节 字对齐
后一个变量若能在前一个变量分配的空间中存放下,则后一个变量不再重新分配空间。

  此部分待续......

 

发布了14 篇原创文章 · 获赞 0 · 访问量 422

猜你喜欢

转载自blog.csdn.net/LIGUOZHENLX/article/details/104083662