• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

C中的位域赋初值问题

fighter-12315 2018-03-31 浏览量:1060
比如
typedef struct _flag_struct
{
    unsigned step1 : 1;
    unsigned step2 : 1;
    unsigned step3 : 1;
    unsigned step4 : 1;
    unsigned step5 : 1;
    unsigned step6 : 1;
    unsigned step7 : 1;
    unsigned step8 : 1;
}flag_struct;

flag_struct flag;
我想在初始化时将flag里的成员变量全部置0;
 除了一个一个让他等于0之外,有没有什么办法一下子全部置0;
我想的是既然他们在一个字节里,感觉能一下子全置0吧。
我的编译器是 MDK 5.23

 
解决办法
包含头文件<string.h>
然后用memset函数即可
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 用memset函数,初始化的值为0;memset(&flag,0,sizeof(struct _flag_struct​));
    • 发布于 2018-04-01
    • 举报
    • 评论 1
    • 1
    • 0
电子老工程师 回复了 :尾缀E代表包装托盘, 回复

其他答案 数量:10
  • memset(&flag,0,sizeof(struct _flag_struct));这个就OK 的。
    • 发布于2018-04-01
    • 举报
    • 评论 2
    • 1
    • 0
电子老工程师 回复了  :没有国产替代,同封装的都是国外的 回复
电子老工程师 回复了  :没有国产替代,同封装的都是国外的 回复

  • 结构体变量也是存放在内存中的,只要是存放在内存中的已定义变量都可以通过memset函数进行初始化或者赋值。

    • 发布于2018-04-02
    • 举报
    • 评论 1
    • 1
    • 0
电子老工程师 回复了  :MX25L25645GMI-10G是原厂标准型号,没有查到关于Y的解释 回复

  • union U {
      char set;
      struct _flag_struct{
        unsigned step1 : 1;
        unsigned step2 : 1;
        unsigned step3 : 1;
        unsigned step4 : 1;
        unsigned step5 : 1;
        unsigned step6 : 1;
        unsigned step7 : 1;
        unsigned step8 : 1;
      }flag ;
    } u;
    u.set='\0'; // 一次性赋值
    u.flag.step1=1; //分别赋值
    u.flag.step2=0;
    ...
    
    • 发布于2018-04-01
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :https://www.ti.com.cn/cn/lit/ds/symlink/tmag5110.pdf?ts=1639474489283&ref_url=https%253A%252F%252Fwww.ti.com%252Fstore%252Fti%252Fzh%252Fp%252Fproduct%252F%253Fp%253DTMAG5110C4AQDBVR 回复

  • 用union,或memset或者定义时初始化
    • 发布于2018-04-01
    • 举报
    • 评论 2
    • 0
    • 0
fighter-12315 回复了 US :那请问memset该怎么用呢? 回复
电子老工程师 回复了  :https://www.ti.com/lit/ds/symlink/tmag5111-q1.pdf?ts=1639474585250&ref_url=https%253A%252F%252Fwww.ti.com%252Fstore%252Fti%252Fen%252Fp%252Fproduct%252F%253Fp%253DTMAG5111B4AQDBVRQ1%2526keyMatch%253DTMAG5111B4AQDBVRQ1 回复

  • memset,初始化为0,用这个
    • 发布于2018-04-01
    • 举报
    • 评论 3
    • 0
    • 0
fighter-12315 回复了 skawu :那请问memset该怎么用呢? 回复
skawu 回复了 skawu :百度百科memset 回复
电子老工程师 回复了  :国产没有满足这个封装5TSSOP 回复

  • 可以用memset或者union
    • 发布于2018-04-01
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :BTS72002EPAXUMA1 , Infineon Technologies,同封装的就这一个,供参考 回复

电子老工程师 回复了  :DMN3023L-7 Diodes Incorporated 请参考。 回复

  • 初始化的时候可以flag_struct flag=0;
    程序编程的时候全赋值,可以用memset
    • 发布于2018-04-01
    • 举报
    • 评论 3
    • 0
    • 0
fighter-12315 回复了 nealson :初始化时赋0会报错..... 回复
nealson 回复了 nealson :对的,因为我没加{},flag={0}这样,应该就不会错了 回复
电子老工程师 回复了  :制造商 Bourns Inc. 制造商产品编号 70ABJ-4-M0E 回复

  • 方法一、
    通过数据类型的强制转换。
    方法二、
    通过指针方式。
    方法三、
    通过共同体的方式,union
    • 发布于2018-04-01
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :没有国产替代 回复

  • 使用union最简单了,而且效率高,memset效率太低了。
    • 发布于2018-04-03
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :没有接头。 回复

相关问题

问题达人换一批

C中的位域赋初值问题