From: http://blog.csdn.net/thdxs/article/details/8204118

struct是C中重要的ADT。但是在一般讲C的书中,往往只介绍了struct的定义、顺序初始化及位域。
  
  为了方便后面的介绍,先定义一个struct类型:
   struct User
   {
   int id; //id
   char name[100]; //user name
   char *home; //home directory
   int passwd; //password
   };
  
  
  1 初始化
  struct数据有3中初始化方法:顺序,C风格及C++风格的乱序。
  
  1)顺序
  这种方法很常见,在一般的介绍C的书中都有介绍。顺序初始化的特点是: 按照成员定义的顺序,从前到后逐个初始化;允许只初始化部分成员;在被初始化的成员之前,不能有未初始化的成员。
  eg:
   struct User oneUser = {10, "Lucy","/home/Lucy"};
  初始化之后,oneUser各个成员的值为:
   oneUser.id = 10;
   oneUser.name = "Lucy";
   oneUser.home = "/home/Lucy";
   oneUser.passwd = 0;
  
  2)乱序(C风格)
  顺序的缺陷是必须按成员定义的顺序逐个初始化,不能间隔。而乱序的方式则很好的解决了这个问题,因为这种方式是按照成员名进行。
  eg:
   struct User oneUser = {
   .name = "Lucy",
   .id = 10,
   .home = "/home/Lucy"
   };
  
  3)乱序(C++风格)
  C++风格的乱序初始化方式跟C风格的一样,只是它更常用在C++代码里。
  eg:
   struct User oneUser = {
   name:"Lucy",
   id:10,
   home:"/home/Lucy"
   };
  
  不论是哪种方式,都允许只初始化部分成员;未被初始化的成员默认为0(指针类型的成员默认为NULL)。两种乱序初始化方法,即可以用在C代码中,也可以用在C++代码中。

----------------------------------------------------------------------------------------------------------------------------
以下为自己的测试代码

// 环境: centos7.2, g++ v4.8.5#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include "user.h"using namespace std;struct Person
{int        id;string   name;int        age;
};void test(vector<Person>& v)
{for(int i = 1; i < 6; i++){//Person p = {i, "hello", i * 11};                         // 按顺序赋值//Person p = {i, "hello"};                                   // 未赋值的以默认方式赋值//Person p = { .id = i, .name = "hello", .age = i * 11 };   // 按名字赋值(与定义顺序一致)Person p = { id: i, name: "hello", age: i * 11 };           // 按名字赋值(与定义顺序一致)//Person p = { .id = i, .age = i * 11, .name = "hello" };    // 按名字赋值(与定义顺序不一致): 不平凡的代理初始值设定不受支持//Person p = { id : i, age : i * 11, name : "hello" };        // 按名字赋值(与定义顺序不一致): 不平凡的代理初始值设定不受支持//Person* p = new Person {i, "hello", i * 11};v.push_back(p);}
}int main()
{vector<Person> v;test(v);cout << v.size() << endl;for(auto& i : v){printf("%d, %s, %d\n", i.id, i.name.c_str(), i.age);}return 0;
}

struct结构体初始化3种方法相关推荐

  1. 结构体初始化三种方法

    方法(一):定义时赋值 # include <stdio.h> struct AGE {int year;int month;int day; }; struct STUDENT {cha ...

  2. C/C++中struct结构体定义变量的3种方法及初始化

    本博客整理自http://blog.csdn.net/zunfo/article/details/51494631 1.struct结构体定义 1.1.先定义结构体,然后再定义结构体变量 struct ...

  3. Go 结构体初始化:

    Go中的结构体初始化方法示例如下: package mainimport ("fmt" )type ListNode struct {Val intNext *ListNode } ...

  4. linux下C结构体初始化

    引子 在看Linux netlink部分的时候看到了这样的写法 struct netlink_kernel_cfg cfg = {.groups = RTNLGRP_MAX,.input = rtne ...

  5. C语言结构体初始化的几种方法

    一.介绍 结构体作为数据结构的基础,经常使用,其中初始化也有几种方法,这里详细介绍 二.常规初始化(先定义再初始化) typedef struct {int bandrate;int databits ...

  6. C++结构体初始化方法

    在 C++ 里可以将结构体看作没有任何成员函数的对象,下面对 C++ 结构体的几种初始化方法进行总结. 文章目录 直接赋值 利用函数赋值 构造函数初始化 直接赋值 #include <bits/ ...

  7. 【Struct(结构体)杂谈之二】名不正则言不顺---Struct(结构体)的声明、定义及初始化

    Struct(结构体)的声明.定义及初始化 上一篇里我们讲了为什么我们要引入Struct这个数据类型,我们了解到Struct是一种聚合数据类型,是为了用户描述和解释一些事物的方便而提出的,Struct ...

  8. 结构体的四种表示方法

    转载自https://blog.csdn.net/qq_37271216/article/details/96611887 1. 先定义结构体类型,再定义结构体变量. struct student{ ...

  9. 嵌套结构体初始化的几种方式

    嵌套结构体初始化的几种方式 #结构体定义 structA define typedef struct {char a;int b;float c; }struct_A_s; structB defin ...

最新文章

  1. 【Boost】系列01:时间与日期
  2. WebView通过loadDataWithBaseURL加载本地页面卡死
  3. luogu P3455 [POI2007]ZAP-Queries (莫比乌斯反演 + 整除分块)
  4. 日本人真会玩!3天众筹60万元来造“机器猫”,会说话摇尾巴的那种
  5. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
  6. maven+svn+hudson+weblogic构建持续集成环境
  7. 三、常用行内元素与块元素
  8. 傅里叶变换公式及其推导【超详细!】
  9. webpower中国区发布《2014年中国教育培训行业邮件营销数据报告》
  10. 利用AOP+Swagger注解实现日志记录功能
  11. 天和流量王v4.69官方版-2011最新绿色版(增加网站流量工具)
  12. Win10_ltsc_2019_x64集成DPO基于人工智能优化可动态提高应用程序性能提升高达394%
  13. verilog学习笔记:简单的数据选择器modelsim仿真
  14. 暗影精灵8 Pro 安装 Ubuntu20.04 问题记录
  15. Date的getDay()和getDate()的区别:
  16. c语言输出法雷序列,法雷(法里)序列 - osc_h0wb1wlt的个人空间 - OSCHINA - 中文开源技术交流社区...
  17. red hat enterprise linux yum,Red Hat Enterprise Linux7.x(RHEL7.x)更换CentOS YUM源
  18. 【MySQL】数据库介绍以及MySQL数据库
  19. 使用代理模式手写简单的数据库连接池
  20. 主流的分布式调度框架、Elastic-job简介、功能和常用介绍

热门文章

  1. LInux 字符设备驱动程序
  2. python bokeh_提升视觉效果:使用Python和Bokeh制作交互式地图
  3. leetcode78. 子集(回溯)
  4. leetcode851. 喧闹和富有(dfs)
  5. udemy下载课程无法播放_最好的Udemy Web开发课程+热门免费课程
  6. HTML DOM方法
  7. react 示例_2020年的React Cheatsheet(+真实示例)
  8. 多重插补 均值插补_Feature Engineering Part-1均值/中位数插补。
  9. Java基础学习-Path环境变量的配置
  10. BZOJ3453 XLkxc(拉格朗日插值)