程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言中的聯合體和結構體

C語言中的聯合體和結構體

編輯:關於C語言

先說結構體

結構體的定義很簡單,注意這裡並不分配空間

//這裡只是定義一個簡單的結構體類型,並不為其分配內存空間
struct student {
    int num;
    char name[20];
};
定義結構體變量:

struct student stu;

當然了,更簡單的方法是用defined,這裡就不細說了,因為本篇文章重點不在這裡。下面打印一下struct和內部變量的大小

    struct student stu;
    printf("struct size->%lu\n", sizeof(stu));//結果是24
    printf("int size->%lu\n", sizeof(int));//結果是4
    printf("char[20] size->%lu\n", sizeof(char[20]));//結果是20

很好4+20=24,但是如果我們在結構體裡邊再增加一個變量sex:

struct student {
    int num;
    char sex;
    char name[20];
};

在次打印變量大小:

    struct student stu;
    printf("struct size->%lu\n", sizeof(stu)); //28
    printf("int size->%lu\n", sizeof(int));  //4
    printf("char size->%lu\n", sizeof(char)); //1
    printf("char[20] size->%lu\n", sizeof(char[20])); 20

這次會發現4+1+20並不等於28,如果將char name[20]改成char name[23],struct大小仍為28,但是如果將int num;夾在char sex;和char name[23];之間定義:

struct student {
    char name[23];
    int num;
    char sex;
};

struct大小將變成32,這是為什麼呢?

這就和操作系統的內存管理有關了,操作系統為了方便管理內存,一般是以一定數量的字節為單位進行管理的,比如這裡是以以四字節為單位的,也就是說如果在struct中出現不足4字節整數倍的變量,就會為其分配四字節整數倍的空間,如果下一個變量仍不足四字節整數倍,就會和上邊的變量“湊合一下”,共用某一個四字節。當然,內存管理設計的東西不是一句兩句能說清楚的,這裡只是簡單地介紹一下,拋磚引玉,更深的東西大家可以自行學習……


至於union,聯合體或者叫做共用體,union使用方法和struct非常相似,唯一的不同是struct變量所占內存長度是各成員的內存之和,而union內存長度則是占內存最大的成員的長度,也就是說union的幾個成員變量是共用一塊內存的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved