-
struct _data
-
{
-
char a:
6;
-
char b:
2;
-
char c:
7;
-
}data;
-
struct 位域结构名{
-
类型说明符 位域名a:位域长度;
-
……
-
类型说明符 位域名b:位域长度;
-
};
-
struct data_ {
-
int a:
1
-
int :
2
/*该2位不能使用*/
-
int b:
3
-
int c:
2
-
}data;
-
struct 位域结构名{
-
类型说明符 位域名:位域长度;
-
……
-
类型说明符 位域名:位域长度;
-
} 位域变量名
1,位域变量名
2……;
-
-
/*其中,位域结构名可以省略掉,直接定义位域变量,如:*/
-
struct {
-
类型说明符 位域名:位域长度;
-
……
-
类型说明符 位域名:位域长度;
-
} 位域变量名
1,位域变量名
2……;
-
-
/*还可以先定义位域类型,再定义位域变量名,如:*/
-
struct 位域结构名{
-
类型说明符 位域名:位域长度;
-
……
-
类型说明符 位域名:位域长度;
-
};
-
struct 位域结构名 位域变量名
1,位域变量名
2……;
-
#include
-
struct data_ {
-
char a :
5;
-
char b :
3;
-
char c :
7;
-
}data;
-
-
int main()
-
{
-
-
printf(
"data 的起始地址是:%p\n",&data);
-
printf(
"data 的占有的字节数:%d\n",
sizeof(
struct data_));
-
}
-
james@jsh:~$ ./a.
out
-
data 的起始地址是:
0x804a01c
-
data 的占有的字节数:
2
-
#include
-
struct data_ {
-
char a :
5;
-
char b :
6;
-
char c :
7;
-
}data;
-
-
int main()
-
{
-
-
printf(
"data 的起始地址是:%p\n",&data);
-
printf(
"data 的占有的字节数:%d\n",
sizeof(
struct data_));
-
}
-
james@jsh:~$ ./a.
out
-
data 的起始地址是:
0x804a01c
-
data 的占有的字节数:
3
-
#include
-
struct data_ {
-
char a :
6;
-
int b :
22;
-
char c :
7;
-
}data;
-
-
int main()
-
{
-
-
printf(
"data 的起始地址是:%p\n",&data);
-
printf(
"data 的占有的字节数:%d\n",
sizeof(
struct data_));
-
}
-
james@jsh:~$ ./a.
out
-
data 的起始地址是:
0x804a01c
-
data 的占有的字节数:
8
-
示例4:
-
#include
-
struct data_ {
-
char a :
6;
-
int b :
30;
-
char c :
7;
-
}data;
-
-
int main()
-
{
-
-
printf(
"data 的起始地址是:%p\n",&data);
-
printf(
"data 的占有的字节数:%d\n",
sizeof(
struct data_));
-
}
-
james@jsh:~$ ./a.
out
-
data 的起始地址是:
0x804a01c
-
data 的占有的字节数:
12
-
#include
-
struct data_ {
-
char a :
6;
-
int b :
12;
-
char c :
7;
-
}data;
-
-
int main()
-
{
-
-
printf(
"data 的起始地址是:%p\n",&data);
-
printf(
"data 的占有的字节数:%d\n",
sizeof(
struct data_));
-
}
-
james@jsh:~$ ./a.
out
-
data 的起始地址是:
0x804a01c
-
data 的占有的字节数:
4
-
#include
-
#pragma pack (2)
-
struct _data
-
{
-
int a:
16;
-
unsigned
char b:
5;
-
char c:
5;
-
}data;
-
void main()
-
{
-
int *p=(
int *)&data;
-
printf(
" 位域结构的起始地址为:%d\n\n",p);
-
data.a=
2;
-
printf(
" 整型指针p 所指向的单元存储的值为:%d\n",*p);
-
printf(
" 位域a 的值为:%d\n",data.a);
-
-
char *p1=(
char*)(p+
1);
-
data.b=
18;
-
printf(
"\n字符指针p1所指向的单元存储的值为:%d\n",*p1);
-
printf(
" 位域b 的值为:%d\n",data.b);
-
data.c=
255;
-
char *p2;
-
p2 = p1+
1;
-
printf(
"\n字符指针p2所指向的单元存储的值为:%d\n",*p2);
-
printf(
" 位域c 的值为:%d\n",data.c);
-
return ;
-
}
-
运行结果:
-
位域结构的起始地址为:
4233624
-
整型指针p 所指向的单元存储的值为:
2
-
位域a 的值为:
2
-
字符指针p1所指向的单元存储的值为:
18
-
位域b 的值为:
18
-
字符指针p2所指向的单元存储的值为:
31
-
位域c 的值为:
-1。