結構體與共用體


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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM