成都创新互联网站制作重庆分公司

结构体-创新互联

定义:结构体

结构(structure) 或叫 结构体

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了景泰免费建站欢迎大家使用!

"结构"是一种构造类型,它是由若干"成员"组成的,每一个成员可以是一个基本数据类型或者又是一个构造类型.

   结构既是一种"构造"而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它,如同在说明和调用函数之前要先定义函数一样

为什么要有结构体?

结构体可以把功能相同的数据组织起来,存在一起,用得时候方便.而且在调用函数时,若传递参数较多,传一个结构体相对而言简单一些,很多系统自带的函数必须用结构体

定义结构体的方法

定义一个结构的一般形式为: struct 结构名{ 成员列表 }; 例: 定义一个学生的结构 struct stu{ int num; char name[10]; //char *name; };

结构体变量的定义有三种方法

1)先定义结构体,然后在定义结构体变量

    struct Student{
//学生学号
      int sno;
      //学生名称
      char name[20];
      //学生年龄
      int age;
      //学生成绩
      float score;
    };
    //注意:
     结构体定义完成以后,计算机并不会给结构体分配内存空间
     会在定义结构体变量后,分配存储空间

    //结构体变量定义格式:
      struct 结构体名 结构体变量名;
struct Student stu1;
2)定义结构体的同时,定义结构体变量

   格式:
    struct 结构体名{

    }结构体变量1,结构体变量2...;

3)使用匿名结构体定义结构体变量

  struct{
  
  }结构体变量1,结构体变量2....;

结构体变量中成员的访问

形式:
    结构变量名.成员名

结构体变量初始化

struct Student{ int sno; char name[21]; int age; float score; }; 初始化: 1): struct Student str; str.sno=1; str.name="abc" //这种方式是错误的 strcpy(str.name,"abc"); str.score = 59.99f 2): 定义结构体变量的同时,进行初始化 初始化值的顺序要和定义结构体的顺序一致 struct Student stu2 ={8,"哈哈",2,4.5f} 问题: 1.stu1.name 占用多少个字节 printf("%d ",sizeof(stu1.name)); //21 2.stub.name 字符串长度是多少 printf("%ld",strlen(stu1.name)); //9 //汉字的编码问题 //utf-8 xcode中默认的中文的编码是utf-8 ,国际通用编码, 一个汉子占用3个字节 //GB2312 GBK 国标 一个汉字占用2个字节

结构体存储原理

结构体占用的内存空间是每个成员占用的字节数之和(考虑对齐问题);

结构体大小的计算方法和步骤

1)将结构体内所有数据成员的长度相加,记为sum_a; 2)将各数据成员为了内存对齐,按各自对齐模数而填充的字节数累加到和sum_a上,记为sum_b。对齐模数是#pragma pack 指定的数值以及该数据成员自身长度中数值较小者.该数据相对起始位置应该是对齐模式的整数倍 3)将和sum_b向结构体模数对齐,该模数是#pragma pac指定的数值和结构体内部大的基本数据类型成员长度中数值较小者.结构体的长度应该是该模数的整数倍 所谓"对齐在N上" ,指定是"存放起始地址%N=0" struct A{ int a; //4 char b; //分配4个,用了1个,剩下3个 short c; //需要2个 }; printf("%ld ",sizeof(stuct A)); //上面的话是书上的 // 1)找对齐模数 // 对齐模数: 是结构体中的基本数据类型中占用字节数大的那个 // 2)在计算结构体变量中各个成员占用的字节和

枚举也是一种结构体

枚举: 枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解任何基本类型 格式: enum 枚举类型{枚举值1,枚举值2....} 枚举变量的值: 枚举类型定义完成以后,系统会自动给枚举的每个元素都会赋值一个整形的初值 初值:从第一个元素开始,值为0,后面元素的值是其上一个元素值+1;
分享名称:结构体-创新互联
浏览路径:http://cxhlcq.com/article/depech.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部