C结构体学习

C结构体学习

  • 学习目标:
    1. 结构体的概念及用途
    2. 结构体类型的声明及其字长
    3. 结构体变量的定义,访问和赋值
    4. 结构体数组和结构体指针的使用
      注:本文为《21天学通C语言》第三版,刘蕾等编著学习笔记

初识结构体

声明结构体类型

  1. 格式:

     struct 结构体名{
     		数据类型1  结构体成员1:
     		数据类型2  结构体成员2:
     		数据类型3  结构体成员3:
     		...
     }
    
  2. 支持的数据类型

    • 内置类型

      • char
      • short
      • int
      • float
      • double
    • 自定义类型

      • struct结构体
      • union联合体
      • enum枚举类型
  3. for example:

    struct person_infor{
    	char name[SIZE_IN]; 			/*姓名*/
    	int age;						/*年龄*/
    	char gender;					/*性别*/
    	char profession[SIZE_IN];		/*职业*/
    	char address[SIZE_IN];			/*地址*/
    	char telephone[SIZE_IN];		/*电话*/
    }
    

定义结构体变量

  1. 声明结构体类型,并定义结构体变量

    struct persion_infor{
    	char name[SIZE_IN];
    	int age;
    	char gender;
    	...
    }
    
    struct persion_infor Raul,Philip;
    struct persion_infor Joe;
    
  2. 不声明结构体类型,直接定义结构体变量

    struct{
    	char name[SIZE_IN];
    	int age;
    	char gender;
    	...
    } Raul,Philip,Joe;
    
  3. 使用typedef得到简化的结构体类型名,再定义结构体变量

    typedef struct persion_infor{
    	char name[SIZE_IN];
    	int age;
    	char gender;
    	...
    } infor;
    infor  Raul,Phliip;
    
    

    补充下 typedel用法:

    	typedef  oldType  new Type;
    	typedef    char  myChar;
    	myChar s="hello world";
    	typedel struct{}       infor;
    		//  原类型		新类型
    	infor  student_infor; //声明变量
    

结构体的存储形式

  1. 结构体的本质
    1. 就是物理连续的线性数据结构
  2. 优化:
    1. 为了方便寻址,一般以其本身数据类型的字节长度为基本单位对齐。(类似mysql的char)

    2. 分配策略可以调整,通过使用#pragma pack 预处理命令来改变对齐规则(后面在了解下)

    3. 示例:

      #include <stdio.h>
      /*使用typeof定义结构体类型*/
      typedef struct _data_type_A{
      	char a[3]; /*成员a*/
      	int b;     /*成员n*/
      	char c;    /*成员c*/
      } data_type_A;
      struct{
      	int a;     /*成员a*/
      	double b;  /*成员a*/
      } v;           /*定义结构体变量v*/
      struct data_type_B{
      	char a[3]; 			   /*成员a*/
      	char b;					   /*成员b*/
      	int c;					   /*成员c*/
      }
      
      1. data_type_A
        在这里插入图片描述
        data_type_A该结构体有三个结构体成员,
        第一个成员为char型数组占用3字节空间。结构体最低占用4个字节,所有空闲一个字节
        第二个成员为int占用4字节空间,正好
        第三个成员为char占用一个字节空间,空闲3个字节
      2. v
        在这里插入图片描述
        成员变量a和b 分别是int double,由于double型的对齐基本单位的字节数为sizeof(double)为8,因此该结构体的字节长度为16
      3. data_type_B
        在这里插入图片描述
        a成员为char型数组,占用3空间,第二成员为char占用一字节,第三成员为int占用4字节,字长为4字节,此时的空闲空间刚好是其对齐的的最小单位,即4字节的开始位置,因此,其得到的内存也紧挨着第二个成员

结构体的应用

访问结构体成员

初始化结构体变量

结构体变量的赋值

结构体数组

定义结构体数组

初始化结构体数组

结构体数组示例

结构体指针

指向结构体变量的指针

指向堆空间的结构体指针

指向结构体数组元素的指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值