zoukankan      html  css  js  c++  java
  • 结构体与共用体

    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 字符 '' 终止的一维字符数组,比如我要打印一个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
    ", sizeof(data));
     
       return 0;
    }
  • 相关阅读:
    POJ2524+并查集
    POJ3697+BFS+hash存边
    POJ1151+线段树+扫描线
    POJ2528+线段树
    ubuntu 和 win7 远程登陆 + vnc登陆
    POJ3690+位运算
    POJ3283+字典树
    POJ3282+模拟
    POJ2349+prim
    2016.6.13
  • 原文地址:https://www.cnblogs.com/callmelx/p/11011632.html
Copyright © 2011-2022 走看看