詳解C語言中結構體的使用
結構體的聲明
結構體的定義:結構體是一些值的集合,這些值稱為成員變量,結構體的每個成員可以是不同類型的變量。
舉例:
//定義結構體類型 struct tag//struct結構體關鍵字 tag結構體標簽 struct tag結構體類型 { //成員變量 char name[20]; short age; char telphone[12]; char sex[5]; }s1,s2,s3;//s1,s2,s3是三個全局結構體變量 int main() { struct tag s;//s是局部變量 return 0; }
小tips:結構體類型是不占內存空間的,-相當於int在C語言中也是不占內存的,而int a(定義a變量後就會占據內存)
使用typedef定義一個單獨的變量,因為我們在編寫代碼的過程中,重復的書寫struct會感覺很繁瑣,這樣定義之後就可以直接使用改變量作為結構體類型。
舉例:
typedef struct tag//定義tag為結構體別名,tag等價於struct tag { char name[20]; short age; char telphone[12]; char sex[5]; }tag;//tag指的是類型,而不是變量 int main() { struct tag s1; tag s2;//struct tag==tag,因此tag可以直接使用 return 0; }
結構體成員的類型
結構體成員的類型可以是標量,數組,指針。其他結構體。
結構體變量的定義和初始化:
#include <stdio.h> typedef struct tag { //結構體成員類型的定義 char name[20]; short age; char telphone[12]; char sex[5]; }tag; int main() { tag s1={"張三",20,"15372842487"};//結構體變量的初始化 printf("%s的年齡是%d,手機號碼為%s\n", s1.name, s1.age, s1.telphone);//輸出有關該成員的信息,通過結構體變量找對應的成員變量 struct tag s2={"lisa",19,"8725111"}; printf("%s的年齡是%d,手機號碼為%s", s2.name, s2.age, s2.telphone); return 0; }
結果
結構體成員的訪問
結構體變量訪問成員:結構體變量的成員是通過點操作符(.)訪問的,點操作符接受兩個操作數。
例如:
struct stu { char name[20]; int age; }s1={"張三",19}; int main() { printf("%s的年齡是%d", s1.name, s1.age);//s1.name和s1.age就是 通過點操作符訪問結構體成員 }
輸出:
張三的年齡是19
結構體傳參數的時候,要傳結構體的地址,其原因是函數傳參的時候,參數是需要壓棧的,如果傳遞一個結構體對象的時候,結構體過大,參數壓棧的系統開銷比較大,因此會導致性能下降。
舉例:
typedef struct stu { char name[20]; int age; }stu; void print1(stu tmp)//傳遞結構體的值 { printf("name:%s\n", tmp.name); printf("age:%d\n", tmp.age); } void print2(stu* ps)//傳遞結構體的地址,開辟的空間為一個指針的大小(4/8個字節) { printf("name:%s\n", ps->name); printf("age:%d\n", ps->age); } int main() { stu s = { "張三",19 }; print1(s); print2(&s); return 0; }
輸出:
name:張三
age:19
name:張三
age:19
這裡插播一點數據結構的知識:數據結構分為線性數據結構(順序表,鏈表,棧,隊列)和樹形數據結構(二叉樹,圖)。
順序表:按照一定的順序將元素儲存起來。
舉例:
鏈表:用一條線將元素連接起來,不要求元素都在同一條線上。
舉例:
棧:元素先進後出,後進先出,元素的出入方式類似於手電筒中的電池一樣,向一個不含任何元素的棧中放入一個元素的過程叫壓棧,刪除棧中的一個元素的過程,叫出棧,棧中元素的刪除也是由棧頂鄉下進行刪除,因此如果想刪除棧中元素,不能直接刪除,必須將在該元素後面放入的元素都進行刪除。
舉例:
實例分析:
int add(int x, int y) { int z = 0; z = x + y; return z; } int main() { int a = 10; int b = 20; int ret = 0; ret = add(a, b); printf("%d\n",ret); return 0; }
輸出:
30
函數在調用的時候,實參的傳遞順序是從右到左,將a,b放入x,y的過程叫壓棧。
到此這篇關於詳解C語言中結構體的使用的文章就介紹到這瞭,更多相關C語言 結構體內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!