• C语言基础--结构体


    位域:

     1 struct 位域结构名
     2 { 位域列表 };
     3 
     4 比如
     5 
     6 struct pack
     7 {
     8    unsigned a:2;
     9    unsigned b:8;
    10    unsigned c:6;        
    11 }pk1, pk2;
    12 
    13 结构变量pk1或者pk2的3个成员将总共占用16位存储,其中a占用2位,b占用8位,c占用6位。

    注:C语言中unsigned即表示unsigned int.

    但是, 一个位域必须存储在同一个字节中,不能跨2个字节,当1个字节所剩空间不够存放另一个位域时,应从下一单元存入该位域。也可以有意使某位域从下一单元开始。例如:

     1 struct bs
     2 
     3 {
     4 
     5   unsigned a:4;
     6 
     7   unsigned  :0;   /*空域*/
     8 
     9   unsigned b:4;  /*从下一单元开始存放*/
    10 
    11   unsinged c:4;
    12 
    13 }

    结构体内部成员的对齐

      在计算结构体长度,尤其是用sizeof运算符时,需要注意根据不同的编译器和处理器,结构体内部的成员有不再的对齐方式,这会引起结构体长度的不确定性。

     1 #include<stdio.h>
     2 struct a
     3 { 
     4     char a1;
     5     char a2;
     6     char a3;
     7 }A;
     8 
     9 struct b
    10 {
    11     short a2;
    12     char a1;
    13 }B;
    14 
    15 int main()
    16 {
    17     printf( "sizeof(char) = %ld, sizeof(short) = %ld, sizeof(A) = %ld, sizeof(B) = %ld
    ",
    18         sizeof(char), sizeof(short), sizeof(A), sizeof(B) );
    19         
    20     return 0;
    21 }

    在Trubo C中结果为:

    1,2, 3,3

  • 相关阅读:
    Apache的443端口被占用解决方法
    关于变量初始化问题
    浏览无法加载控件
    关于网络数据传输
    java 对象是在什么时候创建的?
    HTML HTTP
    2020 年计划
    Docker 学习
    [腾讯 TMQ] 接口测试用例设计
    pytest + request
  • 原文地址:https://www.cnblogs.com/merlindu/p/6417433.html
Copyright © 2020-2023  润新知