请问 C语言里的 结构体中定义变量 后面的:是什么意思

2025-05-23 21:38:03
推荐回答(3个)
回答(1):

在结构体定义时,如果一个变量,需要的数值范围,比最小的char 还要小, 那么为了节省空间,可以使用这样的位域定义

比如你这里的

uint8_t vloc :2; 

就是表示成员vloc 只占两位(2 bits)

typedef struct
{
ble_gap_conn_sec_mode_t read_perm; 
ble_gap_conn_sec_mode_t write_perm; 
uint8_t vlen :1; 
uint8_t vloc :2; 
uint8_t rd_auth :1; 
uint8_t wr_auth :1; 
} ble_gatts_attr_md_t;

在不考虑前两个read和write情况下

后面四个变量 总计占用空间为1+2+1+1=5位,不到一个字节。 


不过 随着内存和flash越来越便宜,位域操作已经用的越来越少了,更多用在寄存器操作上。

回答(2):

  首先,定义一个结构的一般形式为:
  struct结构名
  {
  //成员表列
  };
  成员表由若干个成员组成,
每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符
成员名;”。成员名的命名应符合标识符的书写规定。例如:
  struct
stu
  {
  int
num;
  char
name[20];
  char
sex;
  float
score;
  };
  在这个结构定义中,结构名为stu,该结构由4个成员组成。
第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。
应注意在括号后的分号是必不可少的。
  然后,当结构定义完成后,即创建了一种数据类型,可以像int、float等内置类型一样使用,以上面定义的stu结构体来和int类型对比着看。
  int
a;//定义一个int类型的变量a
  stu
a;
//定义一个stu类型的变量a
  int
*p;
//定义一个int类型的指针p
  stu
*p;
//定义一个stu类型的指针p
  int
a[10];//定义一个int类型的数组a,它有10个元素,每个元素是int类型
  stu
a[10];//定义一个stu类型的数组a,它有10个元素,每个元素是stu类型。

回答(3):

位串占多少位