c++结构体成员初始化

如题所述

第1个回答  2019-10-23
有些信息在存储时,并不需要占用一个完整的字节,
而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1
两种状态,
用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
struct
位域结构名
{
位域列表
};
其中位域列表的形式为:
类型说明符
位域名:位域长度
例如:
struct
bs
{
int
a:8;
int
b:2;
int
c:6;
};
位域变量的说明与结构变量说明的方式相同。
可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如:
struct
bs
{
int
a:8;
int
b:2;
int
c:6;
}data;
说明data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位。对于位域的定义尚有以下几点说明:
1.
一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:
struct
bs
{
unsigned
a:4
unsigned
:0
/*空域*/
unsigned
b:4
/*从下一单元开始存放*/
unsigned
c:4
}
这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。
2.
位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。例如:
struct
k
{
int
a:1
int
:2
/*该2位不能使用*/
int
b:3
int
c:2
};
从以上分析可以看出,位域在本质上就是一种结构类型,
不过其成员是按二进位分配的。
简而言之,言而简之
这是位域操作的表示方法,也就是说后面加上“:1”的意思是这个成员的大小占所定义类型的1
bit,“:2”占2
bit,依次类推。当然大小不能超过所定义类型包含的总bit数。
一个bytes(字节)是8
bit(bit)。例如你的结构中定义的类型是u_char,一个字节,共8bit,最大就不能超过8。

c++结构体成员初始化
bit(bit)。例如你的结构中定义的类型是u_char,一个字节,共8bit,最大就不能超过8。

C++ 结构体如何初始化
1 使用构造函数。在C++中,struct可以当做类(class)来使用,同样支持成员函数,构造函数,析构函数。所以可以写对应的构造函数,实现自由初始化。2 定义时,按照成员变量位置,写初始化列表。如struct test中有成员int a, char b, 和float c,那么初始化一个变量可以写作 struct test t1 = {100, '...

C++结构体初始化导致程序不正常?
PROCESSENTRY32 这个结构体的第一个成员就是 dwSize, PROCESSENTRY32 ppe={0} 这个初始化方式会把 dwSize 赋值为 0,API 就无法判断结构体的版本,而认为输入的参数无效,自然就不会有任何结果了。一般来说,标准的 Win32API 结构体初始化方法是:PROCESSENTRY32 ppe;ZeroMemory(&ppe, sizeof(ppe)...

C++中 结构体的成员指针变量 怎么初始化
不能 但是可以在构造函数中初始化

C++静态结构体数据成员的初始化
静态成员初始化,只能在类外以全局的方式进行,不能在类中完成.include<iostream> using namespace std;struct consumer { int num;char name[18];char password[26];long yu_e;};class ATM { public:void in();void out();void changeP();void check();void give();private:static consumer ...

C++中结构体数组的初始化问题
第一个问题,不能这样初始化,需要 inflatable a={0};集合中至少需要1个元素方可作为初始化列表,专业会将name、volume、price的所有字节全部初始化为0。第二个问题,如果结构体包含有string a;那么就不能使用初始化列表初始化了。也就是说 inflatable a={0}会编译不成功,因为string类有构造函数,...

C++ 如何将一个静态结构体数组初始化?
结构体也可以有构造函数,用默认构造函数就可以在new数组的时候初始化。如果需要成员有初始值,则需要写构造函数,否则直接memset初始化为0即可。参考如下:struct _tagA { int a1;_tagA(){a1 = 1;} }a[100];memset(&a, 0, sizeof(a));...

c++ 定义一个全局的结构体变量,应该怎么初始化
sturct [name]{ [变量声明]; ...;};初始化:[name] [变量名];赋值:[变量名]={[内部变量],...}; [变量名].[内部变量]=[值]; 希望对你有帮助

c++ 结构体struct中的数组 初始化?
数组不能通过数组名进行等号赋值;赋值需要一个一个元素进行,因为数组名是一个const指针,不能更改。

C++,C结构体初始化,全部置0怎么弄?
memset函数 #include <memory.h> memset(&A,0,sizeof(A));VC6测试通过

相似回答
大家正在搜