CC++结构体初始化与赋值
2016-05-30 13:28
246 查看
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] 结构体初始化
相关文章推荐
- 简谈c++小数点精确控制
- /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.17' not found
- error C2275: 'xxx' : illegal use of this type as an expression
- C语言学习入门到精通之gcc编译与调试
- C++简单输出钻石菱形图效果
- C++全局变量的声明和定义
- c++第六次上机实验
- c++第六次上机作业
- C++通过自定义函数求一元二次方程的根
- leetcode 342 Power of Four C++
- C++三色球问题描述与算法分析
- leetcode 66 Plus One C++
- C++常成员函数
- leetcode #61 in cpp
- C++回文数及素数问题计算方法
- [C/C++]_[初级]_[使用remove,remove_if,remove_copy_if过滤元素或字符]
- C语言(如何优雅地使用字符串)
- [C/C++]_[初级]_[使用remove,remove_if,remove_copy_if过滤元素或字符]
- C++之类对象的返回与引用
- C++ 提取字符串中的数字