struct结构体初始化3种方法
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种方法相关推荐
- 结构体初始化三种方法
方法(一):定义时赋值 # include <stdio.h> struct AGE {int year;int month;int day; }; struct STUDENT {cha ...
- C/C++中struct结构体定义变量的3种方法及初始化
本博客整理自http://blog.csdn.net/zunfo/article/details/51494631 1.struct结构体定义 1.1.先定义结构体,然后再定义结构体变量 struct ...
- Go 结构体初始化:
Go中的结构体初始化方法示例如下: package mainimport ("fmt" )type ListNode struct {Val intNext *ListNode } ...
- linux下C结构体初始化
引子 在看Linux netlink部分的时候看到了这样的写法 struct netlink_kernel_cfg cfg = {.groups = RTNLGRP_MAX,.input = rtne ...
- C语言结构体初始化的几种方法
一.介绍 结构体作为数据结构的基础,经常使用,其中初始化也有几种方法,这里详细介绍 二.常规初始化(先定义再初始化) typedef struct {int bandrate;int databits ...
- C++结构体初始化方法
在 C++ 里可以将结构体看作没有任何成员函数的对象,下面对 C++ 结构体的几种初始化方法进行总结. 文章目录 直接赋值 利用函数赋值 构造函数初始化 直接赋值 #include <bits/ ...
- 【Struct(结构体)杂谈之二】名不正则言不顺---Struct(结构体)的声明、定义及初始化
Struct(结构体)的声明.定义及初始化 上一篇里我们讲了为什么我们要引入Struct这个数据类型,我们了解到Struct是一种聚合数据类型,是为了用户描述和解释一些事物的方便而提出的,Struct ...
- 结构体的四种表示方法
转载自https://blog.csdn.net/qq_37271216/article/details/96611887 1. 先定义结构体类型,再定义结构体变量. struct student{ ...
- 嵌套结构体初始化的几种方式
嵌套结构体初始化的几种方式 #结构体定义 structA define typedef struct {char a;int b;float c; }struct_A_s; structB defin ...
最新文章
- 【Boost】系列01:时间与日期
- WebView通过loadDataWithBaseURL加载本地页面卡死
- luogu P3455 [POI2007]ZAP-Queries (莫比乌斯反演 + 整除分块)
- 日本人真会玩!3天众筹60万元来造“机器猫”,会说话摇尾巴的那种
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
- maven+svn+hudson+weblogic构建持续集成环境
- 三、常用行内元素与块元素
- 傅里叶变换公式及其推导【超详细!】
- webpower中国区发布《2014年中国教育培训行业邮件营销数据报告》
- 利用AOP+Swagger注解实现日志记录功能
- 天和流量王v4.69官方版-2011最新绿色版(增加网站流量工具)
- Win10_ltsc_2019_x64集成DPO基于人工智能优化可动态提高应用程序性能提升高达394%
- verilog学习笔记:简单的数据选择器modelsim仿真
- 暗影精灵8 Pro 安装 Ubuntu20.04 问题记录
- Date的getDay()和getDate()的区别:
- c语言输出法雷序列,法雷(法里)序列 - osc_h0wb1wlt的个人空间 - OSCHINA - 中文开源技术交流社区...
- red hat enterprise linux yum,Red Hat Enterprise Linux7.x(RHEL7.x)更换CentOS YUM源
- 【MySQL】数据库介绍以及MySQL数据库
- 使用代理模式手写简单的数据库连接池
- 主流的分布式调度框架、Elastic-job简介、功能和常用介绍
热门文章
- LInux 字符设备驱动程序
- python bokeh_提升视觉效果:使用Python和Bokeh制作交互式地图
- leetcode78. 子集(回溯)
- leetcode851. 喧闹和富有(dfs)
- udemy下载课程无法播放_最好的Udemy Web开发课程+热门免费课程
- HTML DOM方法
- react 示例_2020年的React Cheatsheet(+真实示例)
- 多重插补 均值插补_Feature Engineering Part-1均值/中位数插补。
- Java基础学习-Path环境变量的配置
- BZOJ3453 XLkxc(拉格朗日插值)