解析C语言结构体及位段

发布时间:2020-09-19 17:26:44 作者:胡小哲
来源:脚本之家 阅读:116

1.结构的定义

在实际情况中,数据经常以成组的形式存在。如果这些值的类型各不相同,他们无法同时存储于同一个数组中,在C中,可以使用结构把不同类型的值存储在一起,所以结构也是一些值的集合,这些值称为它的成员,但是这些成员的类型可以不同。

拓展:

“结构”是一种构造数据类型,也叫做用户自定义数据类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构即是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。

2.结构的初始化

结构的初始化和数组相似,位于一对花括号内,由逗号分隔初始值,可用于结构各个成员的初始化。这些值将根据结构成员的顺序写出,如果初始值不够,剩余的结构成员将使用缺省值进行初始化。

struct S
{
  int a;
  int b[10];
  char c[20];
}s={
    10,
    {1,2,3,4,5},
    "abc"
  };

typedef:在C中,定义一个结构体类型如果要用typedef:

typedef struct Student
{
  int a;
}Stu;

当需要声明变量时,就可以直接Stu.stu1;如果没有typedef则需用 struct Student stu1 来声明;(Stu==struct Student);

4.结构体的内存存储

结构在内存中的存储是按照成员列表顺序一个接一个的给每个成员分配内存。而在分配的时候则遵循结构体内存对齐规则:

struct S
{
  int a;
  char b;
  double c;
};
//则此结构体大小为16
stuct A
{
  doulbe d;
  char e;
};
struct S
{
  int a;
  char b;
  struct A C;
  double c;
};
//结构体S的大小为32

内存对齐的原因:

5.结构体位段

位段的声明和结构类似,但位段的成员是一个或多个位的字段。位段成员必须声明位int,unsigned int或signed int类型。在成员的后面是一个冒号和一个整数,这个整数就是该位段所占用的位的大小。

struct S
{
  int a : 7;
  signed int b : 6;
  unsigned int c : 12;
};

位段的数据存储:

当一个声明指定了2个位段,第二个位段无法放在第一个位段剩余的位上,编译器有可能把第二个位段放在内存的下一个字节上,也可能直接放在第一个位段后面。

位段的大小:

位段的大小取决于编辑器对位段的数据存储:

struct S
{
  int a : 1;
};
//S的大小为4
struct S
{
  int a : 1;
  int b : 5;
  int c : 6;
};

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对亿速云的支持。如果你想了解更多相关内容请查看下面相关链接

推荐阅读:
  1. c语言中怎么自定义结构体、位段、枚举
  2. C语言之结构体以及结构体对齐访问

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++ 结构体 位段

上一篇:Nginx整合Kafka的方法示例

下一篇:Angular 2.x学习教程之结构指令详解

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》