C語言結構體如何使用
本文小編為大家詳細介紹“C語言結構體如何使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C語言結構體如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
本質
一些值的集合。
簡單使用
#include?<stdio.h> struct?User?{ char?uName[20]; char?uPass[20]; }; int?main()?{ struct?User?u1?=?{ "abc","123" }; printf("%s\n",?u1.uName); printf("%s\n",?u1.uPass); return?0; }
效果:
一些寫法
聲明之后,可以立即創建實例。
也可以單獨聲明。
#include?<stdio.h> struct?User?{ char?uName[20]; char?uPass[20]; }?u1,?u2,?u3; struct?User?u4; int?main()?{ struct?User?u5; return?0; }
匿名結構體:我用了,你們別想再用。
struct?{ char?uName[20]; char?uPass[20]; }x;
我套我自己
只能套指針,因為空間有限。
舉例:鏈表。
#include?<stdio.h> struct?Node?{ int?val; struct?Node*?next; }; int?main()?{ struct?Node?a?=?{?333,NULL?}; struct?Node?b?=?{?666,&a?}; printf("%d\n",?(*b.next).val); return?0; }
效果:
內存對齊
結構體放成員,是一個一個放的。
第一個放到首個地址處。
第二個開始,計算一個對齊數,該數是以下兩個值的較小者:
1,VS的默認值,8。
2,該成員所占字節數。
實際的偏移量是對齊數的整數倍。
最后,結構體的大小是最大對齊數的整數倍。
舉例-int char char
#include?<stdio.h> struct?A?{ int?a; char?b; char?c; }; int?main()?{ struct?A?a?=?{?1,1,1?}; printf("%lld",?sizeof(a)); return?0; }
效果:8
圖解:
int放在首位。
char占1字節,直接放。
第二個char也是。
最后長度,按int的字節數的整數倍,也就是8。
舉例-char int char
#include?<stdio.h> struct?A?{ char?b; int?a; char?c; }; int?main()?{ struct?A?a?=?{?1,1,1?}; printf("%lld",?sizeof(a)); return?0; }
效果:12
圖解:
char直接放。
int從第四個開始放。
char直接放。
最后長度:從9開始第一個4的倍數,12。
舉例-char char int
#include?<stdio.h> struct?A?{ char?b; char?c; int?a; }; int?main()?{ struct?A?a?=?{?1,1,1?}; printf("%lld",?sizeof(a)); return?0; }
效果:8
圖解:兩個char直接放。
int從下一個4的整數倍,也就是第五個開始放。
最后長度:從8開始第一個4的倍數,8。
由結構體指針訪問成員
就是一種箭頭的寫法。
#include?<stdio.h> struct?A?{ int?a; }; int?main()?{ struct?A?a?=?{?333?}; struct?A*?b?=?&a; printf("%d\n",?b->a); return?0; }
效果:
讀到這里,這篇“C語言結構體如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注蝸牛博客行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:niceseo99@gmail.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。版權聲明:蝸牛博客如無特殊標注,文章均為來源于網絡,轉載時請以鏈接形式注明文章出處。
評論