C 語言結構體的使用方法
C 語言結構體使用
1. 結構體的聲明和定義
1.1 介紹
- 我們知道數(shù)組是同種類型值的集合,而結構就是可以將不同類型的值放在一起。
- 結構是一些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量。
- 結構的成員可以是標量、數(shù)組、指針,甚至是其他結構體。
如我們可以將一個學生的一些屬性放在一起
struct stu//定義一個結構體類型,就如int、char,struct stu是我們定義的結構體類型 { //成員變量 char name[20];//名字 int age;//歲數(shù) char id[20];//學號 }; int main() { struct stu a;//定義一個struct stu類型的變量a,而對象a中就包含了名字,歲數(shù),學號的屬性 }
1.2定義的幾種類型
類型1:
struct stu { char name[20]; int age; }; int main() { struct stu a;//定義局部變量a }
類型2:
struct stu { char name[20]; int age; }s1,s2;//定義全局變量s1,s2
2. 結構體初始化
代碼如下:
struct book { float height; char name[20]; }b; struct stu { char name[20]; int age; char id[20]; struct book b; }; int main() { //初始化時,其實是和數(shù)組初始化一樣,用大括號,里面放上初始化的值。若結構體里面包含結構體,則大括號里面 //在放一個大括號,里面放內(nèi)部結構體初始化的值 struct stu a={"bobo",18,"2021520",{15.8,"free"}}; }
3. 結構體成員訪問
3.1 成員介紹
- 結構變量的成員是通過點操作符(.)訪問的。點操作符接受兩個操作數(shù),如:m.n(m為結構體變量,n為結構體中你想要訪問的成員變量)
- 指向一個結構體的指針訪問指向變量的成員是通過操作符(->)訪問的。 如:m->n(m為指向一個結構體的指針,n為結構體中你想要訪問的成員變量),也可以(*m).n
struct book { float height; char name[20]; }b; struct stu { char name[20]; int age; char id[20]; struct book b; }; int main() { struct stu a={"bobo",18,"2021520",{15.8,"free"}}; //法一 printf("%s\n",a.name); printf("%d\n",a.age); printf("%.1f\n",a.b.height);//若訪問結構體中的結構體中的一個成員,先訪問到內(nèi)部的結構體,再訪問內(nèi)部結構體中的成員 //法二 struct stu* pa=&a; printf("%s\n",pa->name); printf("%d\n",pa->age); printf("%.1f\n",pa->b.height); //法三 printf("%s\n",(*pa).name); printf("%d\n",(*pa).age); printf("%.1f\n",(*pa).b.height); }
4. 結構體傳參
注意:
結構體傳參的時候
,要傳結構體的地址
更好
代碼如下:
struct book { float height; char name[20]; }b; struct stu { char name[20]; int age; char id[20]; struct book b; }; void print1(struct stu p) { printf("%s %d %s %.1f %s",p.name,p.age,p.id,p.b.height,p.b.name); } void print2(struct stu* pa) { printf("%s %d %s %.1f %s",pa->name,pa->age,pa->id,pa->b.height,pa->b.name); } int main() { struct stu a={"bobo",18,"2021520",{15.8,"free"}}; //寫一個函數(shù)打印a的內(nèi)容 print1(a);//結果為:bobo 18 2021520 15.8 free(正常打?。? //再寫一個函數(shù),通過傳a的地址打印a的內(nèi)容 print2(&a);//結果為:bobo 18 2021520 15.8 free(正常打?。? return 0; }
那么傳值和傳址有什么不同,哪個更好呢?(首選傳址)
- 傳參時,其實是對實參的一份拷貝,是會開辟一塊空間來存儲實參。傳值,是將整個實參拷貝過去,而傳地址,傳過去的只是地址,傳參的效率更高一些。
- 函數(shù)傳參的時候,參數(shù)是需要壓棧的。 如果傳遞一個結構體對象的時候,結構體過大,參數(shù)壓棧的的系統(tǒng)開銷比較大,所以會導致性能的下降。
那么什么是函數(shù)調(diào)用的參數(shù)壓棧呢?
棧:一種數(shù)據(jù)結構,是一種只能在一端進行插入和刪除操作的特殊線性表
特點:先進的后出,后進的先出。(先進入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時候從棧頂開始彈出數(shù)據(jù)(最后一個數(shù)據(jù)被第一個讀出來))
壓棧:給棧里存數(shù)據(jù)
- 每一個函數(shù)的調(diào)用都會在內(nèi)存的棧區(qū)上開辟一塊空間,并且數(shù)據(jù)都會如壓棧一樣一個一個的存放進棧區(qū),如果數(shù)據(jù)比較多、大時,參數(shù)壓棧就比較吃力,所以導致性能就會下降。
到此這篇關于C 語言結構體的使用基礎版的文章就介紹到這了,更多相關C 語言結構體的使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- C語言結構體的具體使用方法
- C語言入門篇--初識結構體
- C語言自定義類型詳解(結構體、枚舉、聯(lián)合體和位段)
- c語言結構體字節(jié)對齊的實現(xiàn)方法
- C語言中結構體與內(nèi)存對齊實例解析
- C語言結構體計算內(nèi)存占用問題解析
- C語言結構體指針案例解析
- C語言中結構體和共用體實例教程
- C語言結構體簡單入門講解
- C語言使用四種方法初始化結構體
- C語言新手練習之多維數(shù)組、結構體及函數(shù)
- C語言中結構體、聯(lián)合體的成員內(nèi)存對齊情況
- C語言自定義數(shù)據(jù)類型的結構體、枚舉和聯(lián)合詳解
- C語言結構體內(nèi)存的對齊知識詳解
- C語言結構體占用內(nèi)存深入講解
- C語言結構體版學生成績管理系統(tǒng)
相關文章
用c語言實現(xiàn)2000內(nèi)既能被3整除又能被7整除的個數(shù)
本篇文章是對使用c語言實現(xiàn)2000內(nèi)既能被3整除又能被7整除的個數(shù),用實例進行了分析說明,需要的朋友參考下2013-05-05VisualStudio?制作Dynamic?Link?Library動態(tài)鏈接庫文件的詳細過程
這篇文章主要介紹了VisualStudio?制作Dynamic?Link?Library動態(tài)鏈接庫文件的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08C語言經(jīng)典算法例題求100-999之間的“水仙花數(shù)”
本文的主要內(nèi)容,設計一個程序,找出100-999之間的“水仙花數(shù)”,需要的朋友可以參考下2015-07-07C語言詳細分析講解內(nèi)存管理malloc realloc free calloc函數(shù)的使用
C語言內(nèi)存管理相關的函數(shù)主要有realloc、calloc、malloc、free等,下面這篇文章主要給大家介紹了關于C語言內(nèi)存管理realloc、calloc、malloc、free函數(shù)的相關資料,需要的朋友可以參考下2022-05-05c++連接mysql數(shù)據(jù)庫的兩種方法(ADO連接和mysql api連接)
現(xiàn)在正做一個接口,通過不同的連接字符串操作不同的數(shù)據(jù)庫。要用到mysql數(shù)據(jù)庫,C++連接mysql有2種方法:利用ADO連接、利用mysql自己的api函數(shù)進行連接,下面看看如何用吧2013-12-12C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學習教程
這篇文章主要介紹了C++函數(shù)的嵌套調(diào)用和遞歸調(diào)用學習教程,是C++入門學習中的基礎知識,需要的朋友可以參考下2015-09-09