结构体,位域,共用体

Posted godehi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体,位域,共用体相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <string.h>
/**
 * 结构体
 */
struct Books{
char a[30];
char b[30];
int c;
}Book1,Book2;

/**
 * 结构体作为参数
 * @param book [description]
 */
void printBook( struct Books book )
{
   printf( "Book a : %s
", book.a);
   printf( "Book b : %s
", book.b);
   printf( "Book c : %d
", book.c);
}

/**
 * 结构体指针作为参数
 * @param book [description]
 */
void printBook1( struct Books *book )
{
   printf( "Book a : %s
", book->a);//指针访问结构成员用->
   printf( "Book a : %s
", (*book).a);//直接访问结构成员用.
   printf( "Book b : %s
", book->b);
   printf( "Book c : %d
", book->c);
}

void main()
{
// strcpy(Book1.a,"asdasdasdasd");
// strcpy(Book1.b,"123123");
// Book1.c = 212;
// printBook(Book1);
// 指向结构的指针
// struct Books *b;
// b = &Book1;
// printBook1(b);
// printBook1(&Book1);

/**
 * 位域
 */
// struct bc{
//  unsigned int a:1;
//  unsigned int  :1;
//  unsigned int b:5;
//  unsigned int c:3;
//  unsigned int d:8;
// }bit,*pbit;

// bit.a = 1;
// bit.b = 30;
// bit.b = 33;//定义的数字不能超过规定的内存 否则会编译失败
// bit.c = 7;
// bit.d = 255;
// printf("%d,%d,%d,%d
", bit.a,bit.b,bit.c,bit.d);
// pbit = &bit;
// pbit->a = 1;
// pbit->b = 31;
// pbit->c = 7;
// pbit->d = 255;
// printf("%d,%d,%d,%d
", bit.a,bit.b,bit.c,bit.d);

//共用体共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。
//您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。
//共用体提供了一种使用相同的内存位置的有效方式。
//共用体占用的内存应足够存储共用体中最大的成员。
// union Data{
//  int i;
//  float j;
//  char k[20];
// }data;
// printf( "Memory size occupied by data : %d
", sizeof(data));//Memory size occupied by data : 20
// data.i = 10;
// data.j = 220.5;
// strcpy( data.k, "C Programming");
// printf( "data.i : %d
", data.i);
// printf( "data.j : %f
", data.j);
// printf( "data.k : %s
", data.k);
/////////////////////////////////////////////////////
// data.i : 1917853763                             //
// data.j : 4122360580327794900000000000000.000000 //
// data.k : C Programming                          //
/////////////////////////////////////////////////////
///只有最后赋给变量的值才能够保存下来,其他的数据有损伤
}

 

以上是关于结构体,位域,共用体的主要内容,如果未能解决你的问题,请参考以下文章

C语言结构体中冒号的作用——位域

Visual Studio C++ 位域结构体大小问题

C语言中如何将16位结构体定义为4位和12位两部分

C语言-结构体与位域

关于位域在结构体的应用

20160221.CCPP体系详解(0031天)