您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語言結構體應用實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C語言結構體應用實例分析”文章能幫助大家解決問題。
結構是一些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量
struct tag { member-list; }variable-list;
下面幾種方式都一樣,定義了學生的結構體類型,內容包括:名字、年齡、性別、學號
//舉例1 struct Stu { char name[20];//名字 int age;//年齡 char sex[5];//性別 char id[20];//學號 };//分號不能丟 //舉例2 struct Stu { char name[20];//名字 int age;//年齡 char sex[5];//性別 char id[20];//學號 }s1,s2,s3;//定義了3個結構體類型的變量 //舉例3 typedef struct stu stu; //舉例4 typedef struct stu { char name[20]; int age; char sex[8]; float score; }stu; int main() { struct stu stu4;//局部變量 struct stu stu5; stu stu6;//全局變量 return 0; }
結構的成員可以是標量、數組、指針,甚至是其他結構體
struct Point { int x; int y; }p1; //聲明類型的同時定義變量p1 struct Point p2; //定義結構體變量p2 //初始化:定義變量的同時賦初值。 struct Point p3 = { x, y }; struct Stu //類型聲明 { char name[15];//名字 int age; //年齡 }; struct Stu s = { "zhangsan", 20 };//初始化 struct Node { int data; struct Point p; struct Node* next; }n1 = { 10, {4,5}, NULL }; //結構體嵌套初始化 struct Node n2 = { 20, {5, 6}, NULL };//結構體嵌套初始化
結構變量的成員是通過點操作符(.)訪問的。點操作符接受兩個操作數:變量名.成員
struct S s; strcpy(s.name, "zhangsan");//使用.訪問name成員 s.age = 20;//使用.訪問age成員
指向一個結構體的指針,結構體指針訪問指向變量的成員,變量名 ->成員
struct Stu { char name[20]; int age; }; void print(struct Stu* ps) { printf("name = %s age = %d\n", (*ps).name, (*ps).age); //使用結構體指針訪問指向對象的成員 printf("name = %s age = %d\n", ps->name, ps->age); }
struct point { int x; int y; }p1 = {10,20}; struct s//結構體 { char c; struct point sp; double d; char arr[20];//字符串 }; void print1(struct s ss)//傳參結構體 { printf("%c\n", ss.c); printf("%d\n", ss.sp.x); printf("%d\n", ss.sp.y); printf("%lf\n", ss.d); printf("%s\n", ss.arr); } int main() { struct point p1 = { 100, 200 };//定義1個變量,并初始化 struct s ss = { 'w',{100,20},5.5,"hello" };//初始化 ss.c = 'b'; ss.sp.x = 1000; ss.sp.y = 2000; ss.d = 3.14; //ss.arr = "wolrd";錯誤的方法 strcpy(ss.arr, "world");//字符串賦值函數 print1(ss);//打印結構體變量 }
struct point { int x; int y; }p1 = {10,20}; struct s { char c; struct point sp; double d; char arr[20];//字符串 }; void print2(struct s* ss)//傳參地址 { printf("%c\n", ss->c); printf("%d\n", ss->sp.x); printf("%d\n", ss->sp.y); printf("%lf\n", ss->d); printf("%s\n", ss->arr); } int main() { struct s ss = { 'w',{100,20},5.5,"hello" };//初始化 ss.c = 'b'; ss.sp.x = 1000; ss.sp.y = 2000; ss.d = 3.14; //ss.arr = "wolrd";錯誤的方法 strcpy(ss.arr, "world"); print2(&ss);//打印結構體變量 }
上面兩種函數實現的效果一樣,見下圖:
函數print1接受的是結構體類型變量,是形參,另外開辟了空間,將實參拷貝了一份,占用內存空間大
- 函數print2接受的是結構體類型的地址,定義結構體類型的指針接收地址,只開辟了空間存放地址,占用內存空間小
**要注意:**函數傳參的時候,參數是需要壓棧的。如果傳遞一個結構體對象的時候,結構體過大,參數壓棧的的系統開銷比較大,所以會導致性能的下降。因此,結構體傳參的時候,要傳結構體的地址,即函數 print2 比函數 print1 效果好。
關于“C語言結構體應用實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。