最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C 語言結(jié)構(gòu)體的使用方法

 更新時(shí)間:2021年09月02日 17:24:16   作者:吞吞吐吐大魔王  
這篇文章主要介紹了C 語言結(jié)構(gòu)體的使用,文章介紹了結(jié)構(gòu)體定義的多種類型,想具體了解的朋友請(qǐng)看下面文章的內(nèi)容

C 語言結(jié)構(gòu)體使用

1. 結(jié)構(gòu)體的聲明和定義

1.1 介紹

  • 我們知道數(shù)組是同種類型值的集合,而結(jié)構(gòu)就是可以將不同類型的值放在一起。
  • 結(jié)構(gòu)是一些值的集合,這些值稱為成員變量。結(jié)構(gòu)的每個(gè)成員可以是不同類型的變量。
  • 結(jié)構(gòu)的成員可以是標(biāo)量、數(shù)組、指針,甚至是其他結(jié)構(gòu)體。

如我們可以將一個(gè)學(xué)生的一些屬性放在一起

struct stu//定義一個(gè)結(jié)構(gòu)體類型,就如int、char,struct stu是我們定義的結(jié)構(gòu)體類型
{
    //成員變量
    char name[20];//名字
    int age;//歲數(shù)
    char id[20];//學(xué)號(hào)
};
int main()
{
    struct stu a;//定義一個(gè)struct stu類型的變量a,而對(duì)象a中就包含了名字,歲數(shù),學(xué)號(hào)的屬性
}

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. 結(jié)構(gòu)體初始化

代碼如下:

struct book
{
   float height;
   char name[20];
}b;
struct stu
{
    char name[20];
    int age;
    char id[20];
    struct book b;
};
int main()
{
    //初始化時(shí),其實(shí)是和數(shù)組初始化一樣,用大括號(hào),里面放上初始化的值。若結(jié)構(gòu)體里面包含結(jié)構(gòu)體,則大括號(hào)里面 //在放一個(gè)大括號(hào),里面放內(nèi)部結(jié)構(gòu)體初始化的值
    
    struct stu a={"bobo",18,"2021520",{15.8,"free"}};
}

3. 結(jié)構(gòu)體成員訪問

3.1 成員介紹

  • 結(jié)構(gòu)變量的成員是通過點(diǎn)操作符(.)訪問的。點(diǎn)操作符接受兩個(gè)操作數(shù),如:m.n(m為結(jié)構(gòu)體變量,n為結(jié)構(gòu)體中你想要訪問的成員變量)
  • 指向一個(gè)結(jié)構(gòu)體的指針訪問指向變量的成員是通過操作符(->)訪問的。 如:m->n(m為指向一個(gè)結(jié)構(gòu)體的指針,n為結(jié)構(gòu)體中你想要訪問的成員變量),也可以(*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);//若訪問結(jié)構(gòu)體中的結(jié)構(gòu)體中的一個(gè)成員,先訪問到內(nèi)部的結(jié)構(gòu)體,再訪問內(nèi)部結(jié)構(gòu)體中的成員
    
    //法二
    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. 結(jié)構(gòu)體傳參

注意:

結(jié)構(gòu)體傳參的時(shí)候,要傳結(jié)構(gòu)體的地址更好

代碼如下:

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"}};
    
    //寫一個(gè)函數(shù)打印a的內(nèi)容
    
    print1(a);//結(jié)果為:bobo 18 2021520 15.8 free(正常打印)
    
    //再寫一個(gè)函數(shù),通過傳a的地址打印a的內(nèi)容
    
    print2(&a);//結(jié)果為:bobo 18 2021520 15.8 free(正常打?。?
    
    return 0;
}

那么傳值和傳址有什么不同,哪個(gè)更好呢?(首選傳址

  • 傳參時(shí),其實(shí)是對(duì)實(shí)參的一份拷貝,是會(huì)開辟一塊空間來存儲(chǔ)實(shí)參。傳值,是將整個(gè)實(shí)參拷貝過去,而傳地址,傳過去的只是地址,傳參的效率更高一些。
  • 函數(shù)傳參的時(shí)候,參數(shù)是需要壓棧的。 如果傳遞一個(gè)結(jié)構(gòu)體對(duì)象的時(shí)候,結(jié)構(gòu)體過大,參數(shù)壓棧的的系統(tǒng)開銷比較大,所以會(huì)導(dǎo)致性能的下降。

那么什么是函數(shù)調(diào)用的參數(shù)壓棧呢?

棧:一種數(shù)據(jù)結(jié)構(gòu),是一種只能在一端進(jìn)行插入和刪除操作的特殊線性表

特點(diǎn):先進(jìn)的后出,后進(jìn)的先出。(先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時(shí)候從棧頂開始彈出數(shù)據(jù)(最后一個(gè)數(shù)據(jù)被第一個(gè)讀出來))

壓棧:給棧里存數(shù)據(jù)

  • 每一個(gè)函數(shù)的調(diào)用都會(huì)在內(nèi)存的棧區(qū)上開辟一塊空間,并且數(shù)據(jù)都會(huì)如壓棧一樣一個(gè)一個(gè)的存放進(jìn)棧區(qū),如果數(shù)據(jù)比較多、大時(shí),參數(shù)壓棧就比較吃力,所以導(dǎo)致性能就會(huì)下降。

到此這篇關(guān)于C 語言結(jié)構(gòu)體的使用基礎(chǔ)版的文章就介紹到這了,更多相關(guān)C 語言結(jié)構(gòu)體的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VS Code 中安裝運(yùn)行、編寫C語言程序的詳細(xì)教程

    VS Code 中安裝運(yùn)行、編寫C語言程序的詳細(xì)教程

    這篇文章主要介紹了VS Code 中安裝運(yùn)行、編寫C語言程序的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Visual Studio2000系列版本安裝OpenGL的圖文教程

    Visual Studio2000系列版本安裝OpenGL的圖文教程

    這篇文章主要介紹了Visual Studio2000系列版本安裝OpenGL的圖文教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C與C++ 無參函數(shù)的區(qū)別解析

    C與C++ 無參函數(shù)的區(qū)別解析

    在《C++ 編程思想》:“關(guān)于無參函數(shù)聲明,C與C++有很大的差別。在C語言中,聲明int fun1(),意味著一個(gè)可以有任意數(shù)目和類型的函數(shù);而在C++中,指的卻是一個(gè)沒有參數(shù)的函數(shù)”
    2013-07-07
  • QT中大部分部件如何使用舉例詳解

    QT中大部分部件如何使用舉例詳解

    QWidget類是所有用戶界面對(duì)象的基類,被稱為基礎(chǔ)窗口部件,下面這篇文章主要給大家介紹了關(guān)于QT中大部分部件如何使用的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C語言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲

    C語言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)組應(yīng)用實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 深入理解c++中virtual關(guān)鍵字

    深入理解c++中virtual關(guān)鍵字

    本篇文章主要是對(duì)c++中virtual關(guān)鍵字進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • C語言中關(guān)于指針變量的坑

    C語言中關(guān)于指針變量的坑

    這篇文章主要給大家介紹了關(guān)于C語言中關(guān)于指針變量坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C語言算法積累加tag的循環(huán)隊(duì)列

    C語言算法積累加tag的循環(huán)隊(duì)列

    這篇文章主要為大家介紹了C語言算法積累加tag的循環(huán)隊(duì)列的解題思路,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • C++設(shè)計(jì)模式之裝飾模式(Decorator)

    C++設(shè)計(jì)模式之裝飾模式(Decorator)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之裝飾模式Decorator的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C/C++ ip地址與int類型的轉(zhuǎn)換實(shí)例詳解

    C/C++ ip地址與int類型的轉(zhuǎn)換實(shí)例詳解

    這篇文章主要介紹了C/C++ ip地址與int類型的轉(zhuǎn)換實(shí)例詳解的相關(guān)資料,這里提供了實(shí)例代碼,實(shí)現(xiàn)思路及實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-12-12

最新評(píng)論

吉林市| 壶关县| 观塘区| 固阳县| 大悟县| 兴文县| 孟连| 上虞市| 建宁县| 富源县| 东乌| 嫩江县| 涿鹿县| 县级市| 西昌市| 山丹县| 临邑县| 新河县| 花莲市| 滦南县| 松溪县| 卓资县| 合江县| 阜平县| 平邑县| 义马市| 开鲁县| 安宁市| 桐梓县| 宜川县| 九龙县| 嵩明县| 武陟县| 巩义市| 雅江县| 桦南县| 海林市| 依安县| 稻城县| 湖北省| 静安区|