结构体与共用体

c语言中的结构体有些类似对象,只是不能继承实例化,只能用于表示存储不同的数据类型。

例如顶一个Book的“对象”:

struct Book{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;    
} book;

其中Book是结构体的标签,book结构体的变量名,里面的char title[50];是定义了一个个的变量。

==========================================================

char title[50];表示对title变量强制生命50个字符的空间。

在 C 语言中,字符串实际上是使用 null 字符 '\0' 终止的一维字符数组,比如我要打印一个hello,这一共是5个字符呢,

char greeting[] = "Hello";//最后编译器会自动增加一个
如果是:
char greeting[5] ="hello";这是会有异常显示

 char greeting[4] = "hello";会提示长度太小。

===========================================================

访问结构体的成员方法:使用.(点)来访问,这个和对象使用属性比较接近。

定义好结构体以后,声明变量--->可以类比,定义好类以后,实例化对象

struct Book book1;
struct Book book2;

 

内存对齐:

对齐方式一般多分为4字节对齐和8字节对齐,具体是那种方式,以结构体中最大的字节长度为准,如指针是8字节,则以八字节为准,如果只有char, int则以int长度为准4字节,如果一个结构体里面有三个全是char,那么就是1字节对齐。

32位系统中 long 是4个字节;64位系统中long 是8个字节

测试一下

book.c

#include <stdio.h>
struct Book{
       char title;
       int i;      
} book;
int main (){
    struct Book book;
     printf("%zu",sizeof(book));
}

编译运行:

gcc  book.c

./a.out

 

========================================================================================================================================

共用体:


共用体顾名思义,就是共用内存,可以在相同的位置存储不同类型的变量。以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。就像上厕所,可以不同的人去上,但是每次只能有一个人。

共用体的大小有最大值决定。

测试一下:

 

#include <stdio.h>
 
union Data
{
   int i;
   float f;
   char  u[20];
} data;
 
int main( )
{
   union Data data;        
 
   printf( "%d\n", sizeof(data));
 
   return 0;
}

 

posted @ 2019-06-12 20:29  callmelx  阅读(2176)  评论(0编辑  收藏  举报