1. 程式人生 > >C語言中的結構體。

C語言中的結構體。

這篇部落格我想將一下C語言中的結構體。

對於結構體的概念性問題這裡博主不再過多闡述,我們還是用程式碼說話。

//結構體的語法  這是C語言中的規則
struct 結構體名{
    型別名  變數名
};

//我們可以寫一個簡單的結構體
struct STUDENT{
    char name[10];
    int age;
};
//在這裡我們要明白一個事情,C語言中結構體成員變數一般來說應該從定義的由大至小存放,
//比如上面的例子我們是將name放在了前面,age放在後,如果調換位置會造成記憶體空間的浪費。

//學會typedef關鍵字來給變數起別名,下面我們再舉個例子
typedef struct TEACHER{
    char name[10];
    int age;
}Teacher, *TeaCher;
//typedef就給struct TEACHER這個結構體起了別名叫Teacher,特別要說明的是*TeaCher,
//他是怎麼用的呢?我們再寫一段程式碼
main()
{
    //我們把它寫在主函式裡面,這裡的p1和p2實則是等價的,
    //為了方便我們使用結構體變數作為函式引數時使用,
    Teacher *p1;
    TeaCher p2;
}
//如要在主函式中呼叫函式,改變結構體成員的值,如果用Teacher,我們需使用二級指標,
//而使用TeaCher 就像C語言基本成員變數int等型別一樣,更容易我們的理解.

//我們再寫一段程式碼
void fun1( Teacher *p1,Teacher *p2){};
void fun2(int a, int b){};
//這裡的fun1和fun2效果等價,比如我們要通過在主函式中通過函式呼叫改變值,通過上面兩種傳參是無效的

//我們可以寫成這樣
void fun3( TeaCher *p1,TeaCher *p2){}; 
//類比一下 void fun(int* a, int *b){};

//或者使用二級指標
void fun4( Teacher **p1,Teacher **p2){};
//fun3和fun4都能實現相同的效果,但是fun3是不是看起來更容易一點呢?

我們再說一下結構體的使用問題,比如呼叫開闢等。

//我們首先定義一個結構體
typedef struct HUMAN{
    char name[10];
    int age;
    char sex[2];
}Human;

int main()
{
    //我們可以在棧中定義一個結構體變數
    Human h1;
    //我們也可以開闢一個數組
    Human h2[4];
    //我們可以在堆中定義一個結構體變數,這裡我們再使用HuMan建立
    Human *h3 =(Human *)malloc(sizeof(struct HUMAN));
}

今天就寫這麼多吧,如果對程式碼中有不理解的地方,歡迎在下方留言。感謝大家觀看,本文章純屬個人原創,如有雷同,純屬巧合。如轉載請說明出處。