C語言--結構體

結構體,是一個在C語言中允許存儲不同類型數據的數據結構,和前面我們說到的數組不同,數組是存儲相同類型的數據,而結構體是可以存儲不同類型的數據。例如:在數組中,如果是一個int類型的數組,那麼數組中的元素只能是int類型的數據。而結構體不同,在定義結構體的時候,結構體的屬性可以是不同數據類型。下面我們就來定義一個結構體。
struct BOOKS
{
    char title[50];
    char subject[50];
    int book_id;
};
struct是定義結構體的關鍵字,Books是結構體的名稱,{}內的是結構體的成員屬性。我們可以看到,在結構體中,成員屬性的類型是不一樣的有char,有int。這樣的一種數據結構就方便了我們對於現實中數據的存儲,就如上面的例子,要存儲一本書,如果我們按照以前的方式,創建一個title變量,一個subject變量,創建一個book_id變量。這樣也是可以的,但是如果我們的book有更多的成員屬性,那麼這個代碼就寫的很麻煩了。而且對於有很多的book的數據需要處理的時候,這樣的邏輯就不是正常的開發人員的邏輯了。我們的工作就是要讓複雜的管理變得簡單。這個時候,結構體就凸顯出了它特有的有點。
而且,結構體很像我們在面嚮對象語言中的類,每一個結構成員都是一個對象。這樣的設計就很合現實情理。
結構體的定義很簡單,只是定義名稱,然後寫入需要的成員屬性即可。當我們要使用一個已經定義的結構體對我們現有數據進行操作管理的時候,那麼,結構體的訪問也是我們必須要學會的內容。
    //聲明成員對象
    struct BOOKS book;
    
    //給成員對象賦值
    strcpy( book.title, "C Programming");
    strcpy( book.subject, "C Programming Tutorial");
    book.book_id = 6495407;
    
    //使用成員對象的屬性
    printf("%s\n", book.title);
上面的代碼就是對結構體的訪問,使用我們上面定義的結構體,第一步,聲明book,其類型是結構體BOOKS類型。第二步,給book的屬性賦值,也可稱爲是book詳述。最後就是使用我們賦值後的結構體對象的。
從定義,到賦值,再到使用。活脫脫的面向對象有沒有。結構體BOOKS就是一個類,而聲明的book就是BOOKS的一個對象,title,subject,book_id都是類的成員屬性。這樣的理解更加有助於我們對於結構體的認識。


在函數的參數介紹時,已經說了函數的參數可以是任何的C語言數據類型。在以前的文章中,也介紹了數組,指針,指針數組作爲函數參數的例子。那麼,結構體是不是也是可以作爲函數的參數呢?答案當然是可以。
要想讓結構體作爲參數傳遞給函數,那麼,必須要讓函數可以接收一個結構體。也就是說,函數的形式參數的類型就要是結構體類型。下面是一個示例:
函數:
void printBook( struct Books book )
{
   printf( "Book title : %s\n", book.title);
   printf( "Book author : %s\n", book.author);
   printf( "Book subject : %s\n", book.subject);
   printf( "Book book_id : %d\n", book.book_id);
}
調用:
   printBook( Book1 );
在上面的示例中可以看到,函數的形參是一個結構體的成員,所以,在調用的時候就只需要將一個結構體成員作爲實參使用即可。


也可以使用一個指針指向結構體。這個就是定義一個指向結構的指針,示例如下:
struct Books *pointer;
pointer = &Book1;
在上面的代碼實例中,我們不難發現,在一個指向結構的指針中存儲的是一個完整的結構成員。將一個結構成員的所以屬性都存儲在一個指針中。


//定義結構體
struct BOOKS
{
    char title[50];
    char subject[50];
    int book_id;
} ;
//函數聲明
void printBook(struct BOOKS *p);


int main(int argc, const char * argv[]) {
    //聲明成員對象
    struct BOOKS book;
    
    //給成員對象賦值
    strcpy( book.title, "C Programming");
    strcpy( book.subject, "C Programming Tutorial");
    book.book_id = 6495407;
    
    printBook(&book);
    
    return 0;
}


//函數實現
void printBook(struct BOOKS *p){
    printf("%s\n", p->title);
    printf("%s\n", p->subject);
    printf("%d\n", p->book_id);
}


在上面的代碼中,我們看到了一個特別的符號 -> ,這個符號是專門用來使用指向結構的指針訪問結構的成員屬性的時候使用的。而且,在函數的調用時,要將結構成員的地址作爲實參傳遞給函數。













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章