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
  • 4133

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

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

struct结构体初始化3种方法

c语言 struct 的初始化 struct数据有3中初始化方法:顺序,C风格及C++风格的乱序。 1)顺序  这种方法很常见,在一般的介绍C的书中都有介绍。顺序初始化的特点是: 按照成员定...

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

今天在看《深入浅出MFC》时,看到了一个结构体的问题甚是不解,写法为: Struct MSGMAP_ENTRY _messageEntries[]= {        WM_CREATE,OnCrea...

C++ 结构体初始化方法

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C++结构体实例和类实例的初始化

一、若类和结构体所有数据成员均为public型,可采取如下带花括号形式进行初始化。     注意: ①        不论值的个数多少,都必须使用花括号定界 ②        未指定值的数据成员...

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

typedef struct tagSolution {     std::string name;     int age;      }Solution; int...

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

博客地址:http://www.cnblogs.com/vongang/ 结构体能自由组装数据,是一种很常见的数据打包方法。 当我们定义一个结构体后,没有初始化就使用,就会使用到垃圾数据,...

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

首先介绍一下初始化、赋值、定义、声明这四个概念。 初始化:创建变量并给它赋初值。初始化和赋初值不同。初始化=带指定初始值的定义。一个程序中,一个变量只能初始化一次。如:int  i=0; 赋值:擦除对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CC++结构体初始化与赋值
举报原因:
原因补充:

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