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