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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问 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越来越便宜,位域操作已经用的越来越少了,更多用在寄存器操作上。

参考技术A   首先,定义一个结构的一般形式为:
  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类型。
参考技术B 位串占多少位

c语言结构体初始化

我用的是vs2010,按照谭浩强书里的page--297,页,说是可以有:strcut student b =.name="zhang fang";这种初始化形式啊,这里为什么会出错呢?

这个结构体中包含三个变量,num name[20] c
你的结构体初始化只初始化了 name[20]
其余俩个变量没有初始化,所以会报错
你可以这样初始化 struct wo b(1,"jack",'M');
要注意对结构体中所有变量都要初始化,除非这个变量有缺省值追问

为什么都必须初始化,谭浩强说C99标准允许对某一成员初始化,什么是缺省值?

追答

对某一成员初始化 是这样的对某一成员 比如
你的例子不是struct wo b;
b.name="jack";
b.num=23;
这样是可以对某一成员赋值的
但你的赋值是对整体赋值,你想一想你的定义struct wo b(,"jack",);
另外两个变量怎么办! 除非你定义结构体的时候如下定义
struct wo

int num=0; //这就是缺省值
char name[20]="jack";
char c; //这个就没有缺省值,懂了吧

参考技术A 没有吧,我怎么没见过,结构体赋值:struct wo b=10,"aaaa",'b';或是b.num=10;没见过你写的那样 参考技术B 这是c99的语法,你的编译器可能不支持c99或你没有打开相应的编译选项

以上是关于请问 C语言里的 结构体中定义变量 后面的:是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

C语言,请问如何将结构体中的结构体拷贝到内存

C语言,请问如何将结构体中的结构体拷贝到内存

请问c 语言中的 const 是啥意思?

C语言定义变量后面加冒号,数字啥意思

C语言结构体在定义的时候,各成员后面加冒号是啥意思?

用c语言给结构体中的元素排序