C語言中的結構體。
阿新 • • 發佈:2018-11-30
這篇部落格我想將一下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));
}
今天就寫這麼多吧,如果對程式碼中有不理解的地方,歡迎在下方留言。感謝大家觀看,本文章純屬個人原創,如有雷同,純屬巧合。如轉載請說明出處。