CC++结构体初始化与赋值

原创 2016年05月30日 13:28:57

1.CC++结构体的初始化

今天看到项目中对自定义结构体初始化方式有点陌生,特在此罗列一下可用的结构体初始化的方式。

对结构体

struct A {
    int b;
    int c;
}

有几种初始化方式:

第一种:

struct A a = {
    .b = 1,
    .c = 2
};

第二种:

struct A a={
    b:1,
    c:2
};

第三种:

struct A a1 = { 1, 2};

Linux内核喜欢用第一种,使用第一种和第二种时,成员初始化顺序可变。

第四种:
因为C++中的struct可以看作class,结构体也可以拥有构造函数,所以我们可以通过结构体的构造函数来初始化结构体对象。

给定带有构造函数的结构体:

struct A {
    A(int a,int b){
        this->a=a;
        this->b=b;
    };
    int b;
    int c;
}

那么结构体对象的初始化可以像类对象的初始化那样,如下形式:

struct A a(1,2);

注意: struct如果定义了构造函数的话,就不能用大括号进行初始化了,即不能再使用前三种初始化的方式了。

2.CC++结构体的赋值

变量的赋值和初始化是不一样的,初始化是在变量定义的时候完成的,是属于变量定义的一部分,赋值是在变量定义完成之后想改变变量值的时候所采取的操作。

还是给定结构体A:

struct A {
    int b;
    int c;
}

注意:结构体变量的赋值是不能采用大括号的方式进行赋值的,例如下面的赋值是不允许的。

struct A  a;
//错误赋值
a={1,2};

下面列出常见结构体变量赋值的方法。

第一种:
使用memset对结构体变量进行置空操作:

//按照编译器默认的方式进行初始化(如果a是全局静态存储区的变量,默认初始化为0,如果是栈上的局部变量,默认初始化为随机值)
struct A a; 
memset(&a,0,sizeof(a));

第二种:
依次给每一个结构体成员变量进行赋值:

struct A a; 
a.b=1;
a.c=2;

第三种:
使用已有的结构体变量给另一个结构体变量赋值。也就是说结构体变量之间是可以相互赋值的。

struct A a={1,2};
struct A aa;
aa=a;               //将已有的结构体变量付给aa

参考文献

[1] 2016腾讯春季校园实习招聘技术岗初试(一面)问题汇总(CC++后台)
[2] 结构体初始化

版权声明:感谢您对博文的关注!2017年秋季校招已经开始,有需要内推腾讯的可以QQ(1589276509)联系我哈,期待你的加入。

浅析C++中结构体的定义、初始化和引用

以下是对C++中结构体的定义、初始化和引用进行了详细的介绍,需要的朋友可以过来参考下 定义: 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也...
  • steft
  • steft
  • 2017年02月09日 10:49
  • 6079

C++ 结构体初始化方法

C++结构体初始化有以下几种方法: 使用构造函数 在C++中,struct可以当做类(class)来使用,同样支持成员函数,构造函数,析构函数。所以可以写对应的构造函数,实现自由初始化。 定义时,按...
  • qinhan728
  • qinhan728
  • 2015年11月12日 23:15
  • 2226

C++结构体类型的定义和初始化

今天在看《深入浅出MFC》时,看到了一个结构体的问题甚是不解,写法为: Struct MSGMAP_ENTRY _messageEntries[]= {        WM_CREATE,OnCrea...
  • harvic880925
  • harvic880925
  • 2012年07月11日 14:21
  • 11333

C++ 总结几种结构体初始化的方法

三种方法: 1、结构体的构造函数中初始化. 2、继承模板类初始化. 3、定义时初始化....
  • qq_33266987
  • qq_33266987
  • 2017年04月28日 11:21
  • 401

c/c++ 中结构体的初始化与类的初始化的不同之处

在C++ 中类的初始化会调用构造函数,根据构造函数来初始化类的变量。如果某个变量没有初始化,则该变量的值是一个随机值。结构体的初始化,是根据所给值来初始化的,如果结构中某个变量的没有赋值,那么该变量被...
  • a675311
  • a675311
  • 2015年09月18日 15:21
  • 758

(C/C++基础)结构体_初始化_赋值_定义_声明

首先介绍一下初始化、赋值、定义、声明这四个概念。 初始化:创建变量并给它赋初值。初始化和赋初值不同。初始化=带指定初始值的定义。一个程序中,一个变量只能初始化一次。如:int  i=0; 赋值:擦除对...
  • u013080459
  • u013080459
  • 2014年01月10日 21:07
  • 3145

c++里初始化结构体的一个比较的简单方法

  • 2009年03月11日 08:28
  • 39KB
  • 下载

结构体初始化

今天同事聊到内核中结构体初始化, 对结构体 struct a { int b; int c; } 有几种初始化方式: struct a a1 = {  .b = 1,  .c = 2...
  • adaptiver
  • adaptiver
  • 2012年04月24日 15:45
  • 151050

c++原来结构体这样初始化也行,一直不知道呢?

typedef struct tagSolution {     std::string name;     int age;      }Solution; int...
  • aiwobiezoukaicnew
  • aiwobiezoukaicnew
  • 2015年01月04日 22:06
  • 444

C++结构体类型的定义和初始化

转自:http://c.biancheng.net/cpp/biancheng/view/170.html 有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用。这些组合在一个整体中的数...
  • malizhchxiaozi
  • malizhchxiaozi
  • 2015年03月05日 14:57
  • 1193
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CC++结构体初始化与赋值
举报原因:
原因补充:

(最多只允许输入30个字)