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

如题:谢谢大神!
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;
BLE_GATTS_VLOCS.*/
uint8_t rd_auth :1;
uint8_t wr_auth :1;
} ble_gatts_attr_md_t;

结构体定义时,如果一个变量,需要的数值范围,比最小的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越来越便宜,位域操作已经用的越来越少了,更多用在寄存器操作上。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-06-17
  首先,定义一个结构的一般形式为:
  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类型。
第2个回答  2017-03-21
位串占多少位

请问C语言里的 结构体中定义变量 后面的:是什么意思
在结构体定义时,如果一个变量,需要的数值范围,比最小的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 vle...

请问C语言里的 结构体中定义变量 后面的:是什么意思
在C语言中,结构体定义中的位域是一种节省空间的数据类型,它允许你指定一个变量只使用结构体中的几个位。例如,`uint8_t vloc :2;` 这条语句定义了一个名为 `vloc` 的变量,它只占用两个位。以下是一个结构体的定义,其中包含了位域的使用:```c typedef struct { ble_gap_conn_sec_mode...

在c语言中struct中 :是什么意思
在C语言中,": "在结构体定义中扮演着关键角色。具体来说,当你看到像`structpci_driver demo_pci_driver = { ... }`这样的语法时,":"表示紧接着的花括号内的内容是对这个结构体变量的初始化。`structpci_driver`是一个在`pci.h`头文件中声明的复杂结构类型,它类似于模板,可以创建多个具体...

c语言中:是什么意思
->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”.举个例子:struct Data { int a,b,c;}; \/*定义结构体*\/ struct Data...

struct定义中在成员后面加冒号“:1”是什么意思?
这是位域操作的表示方法,也就是说后面加上“:1”的意思是这个成员的大小占所定义类型的1 bit,“:2”占2 bit,依次类推。当然大小不能超过所定义类型包含的总bit数。一个bytes(字节)是8 bit(bit)。例如你的结构中定义的类型是u_char,一个字节,共8bit,最大就不能超过8。32位机下,shor...

C语言和C++中的::和->是什么意思?
::是作用域操作符,表示你引用的变量限定在该作用域内。->是箭头操作符,设计它的目的是为了简化输入,以及增强程序的可读性的 ->的功能相当于解引用操作符*和成员调用操作符.的组合体 例如:class C { static int a;} 访问a就可以使用C::a来访问,表明这个变量a具有类C的作用域。它在该类内...

C语言定义变量后面加冒号,数字什么意思
};含义为,在结构体name汇总,成员变量var_name占用空间为n位。n为正整数,其值必须小于type类型占用的位数。比如type如果是int,占4字节32位,那么n必须是1~31之间的整数。对于位域类型的成员,在赋值时如果实际值超过n位所能表达的范围,那么超出部分将会被截掉,只保存低位值。如int var:4,本身...

C语言结构体的定义
这段程序意思是定义一个LNode类的结构体,后面的LNode是结构体变量,LinkList是结构体指针。里面的struct LNode *next是定义指向LNode结构体的指针域,说明LNode结构体里面结点一共两个域一个数据域,一个指针域。}后面的LNode可以去掉,可以在其他地方声明结构体变量。

定义变量时后面带个括号是什么意思
c++中定义一个变量int a(1);是赋初值的意思吗,定义结构体时能这样赋值吗,定义对象时这样代表什么 meitian_12 | 浏览2635 次 |举报 我有更好的答案推荐于2017-12-15 12:13:26 最佳答案 (1)相当于:int a = 1;(2)定义标准的结构体变量时不能这样用(但如果你在结构体中加了结构函数那就可以了),只有...

C语言中的符号集具体使用 如; , 都该在什么时候加!
定义结构体的时候,末尾没有";"定义函数的时候末尾没有分号,但声明函数的时候有 在for循环里面使用";"(两个)在定义一组(同为某一类型)的变量,中间用逗号隔开 函数的参数多于两个的时候,中间用逗号隔开 逗号运算符时用逗号,这个就不用说了!printf和scanf后面的参数,多于两个,用逗号隔开!我能想到的...

相似回答