zoukankan      html  css  js  c++  java
  • 【C语言】结构体初始化

    一、3种结构体初始化方式

    结构体定义

     struct test
     {
         int a;
         char b;
         unsigned short c;
         char *p;
     };
    
    

    1. 定义时赋值

    struct test A = {10, 'a', 2, 0};
    

    2. 先定义,后赋值

    struct test B;
    
    B.a = 20;
    B.b = 'b';
    B.c = 100;
    B.p = NULL;
    

    3. 定义时指定成员赋值(乱序)

    struct test C = 
    {
        .a = 30,
        .b = 'c',
        .c = 200,
        .p = NULL
    };
    

    二、 探险

    • C语言支持以上三种结构体初始化方式,但其中又有不同

      #include <stdio.h>
      
      struct test
      {
          int a;
          char b;
          unsigned short c;
          char *p;
      };
      
      void print_test(struct test * ptr)
      {
          printf("a: %d, b: %d, c: %d,p: %d
      ", ptr->a, ptr->b, ptr->c,ptr->p);
      }
      
      void opera_struct(void)
      {
          struct test A = {10, 'b'};
          print_test(&A);
      
          struct test B;
          B.a = 10;
          print_test(&B);
      
          struct test C =
          {
              .c = 100,
          };
      
          print_test(&C);
      }
      
      int main(void)
      {
          opera_struct();
      
          return 0;
      }
      
      
    • 运行结果

      //gcc-4.8.5
      a: 10, b: 98, c: 0,p: 0
      a: 10, b: 0, c: 0,p: 0
      a: 0, b: 0, c: 100,p: 0
      
      //MinGw
      a: 10, b: 98, c: 0,p: 0
      a: 10, b: 0, c: 0,p: 16
      a: 0, b: 0, c: 100,p: 0
      
    • 第一种与第三种赋值方式相比第二种是不一样的,前两者是定义时进行初始化,对于未被初始化的成员,系统初始化为0,而后者是定义之后进行赋值的操作,不同的编译器有不同的操作方法,在MinGW呈现的是随机值

    • 自己在实际的项目中,利用了第二种方法对结构体进行初始化,项目在一个平台正常运行,在另一个平台上却出现了异常,排查很久才查到,以此作为警戒

    • 建议:在实际工程项目中,多使用第三种初始化赋值方式,而如果使用了第二种初始化方式,别忘了用memset对结构体进行赋0操作

  • 相关阅读:
    Qt Quick实现的涂鸦程序
    Java并发学习之十九——线程同步工具之Phaser
    poj 1845(等比数列前n项和及高速幂)
    装饰模式(旧恋)
    cocos2d-x 3.1.1 学习笔记[3]Action 动作
    Nmap 源代码学习四 软件简单使用
    关于phpcmsv9更新缓存出现链接被重置的问题
    POJ 3159 Candies(SPFA+栈)差分约束
    Ubuntu 配置ISCSI服务
    iSCSI存储技术
  • 原文地址:https://www.cnblogs.com/chenj-nry/p/14823086.html
Copyright © 2011-2022 走看看