0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

結(jié)構(gòu)體基本用法詳解

CHANBAEK ? 來(lái)源:博客園-lzh666 ? 作者:博客園-lzh666 ? 2023-02-15 14:52 ? 次閱讀

結(jié)構(gòu)體詳解

結(jié)構(gòu)體基本用法:

結(jié)構(gòu)體就是把相同或者不同類型的便利放到一起,這和C++中的類很像,但沒(méi)有c++那么復(fù)雜,C語(yǔ)言中的結(jié)構(gòu)體申明如下:

struct student           //結(jié)構(gòu)體名
{
    char   name[10];     //姓名
    int    number;       //編號(hào)
    int    grade;        //成績(jī)
};

申明很簡(jiǎn)單,其內(nèi)存是按順序放置的。

下面需要注意的幾點(diǎn):

1.申明時(shí)不能初始化(為什么后面會(huì)講)

2.申明只是申明一個(gè)結(jié)構(gòu)體,是不能使用的

3.獲取結(jié)構(gòu)體大小可以用sizeof(struct student)

4.結(jié)構(gòu)體可以嵌套定義

5.結(jié)構(gòu)體大小必須是所有成員變量大小的整數(shù)倍

一般我們會(huì)使用新定義類型來(lái)代替結(jié)構(gòu)體,其實(shí)就是給結(jié)構(gòu)體起一個(gè)新的名字

typedef  struct student
{
     char     name[10];
     int      number;
     int      grade;
}STU;

STU stu1={"張三",001,95};//定義一個(gè)stu1結(jié)構(gòu)體變量,并進(jìn)行初始化

注意:只有在定義的時(shí)候才能一起初始化,一旦定義了之后,不能一起初始化,但是可以分別初始化,為啥之后不能初始化,主要原因是因?yàn)榻Y(jié)構(gòu)體變量是按順序存儲(chǔ)的。

這樣STU表示的實(shí)際就是結(jié)構(gòu)體,具體可以參考typedef用法。

結(jié)構(gòu)體既然申明了那怎么使用了,這里我們必須定義一個(gè)結(jié)構(gòu)體變量,注意是結(jié)構(gòu)體變量,也就是定義一個(gè)變量,這里的變量的類型是結(jié)構(gòu)體,因此結(jié)構(gòu)體申明部分其實(shí)就是申明一個(gè)新的變量類型,因此結(jié)構(gòu)體是一個(gè)類型,不是變量,所以這也就是為啥申明的時(shí)候里面不能進(jìn)行初始化的原因。 下面舉個(gè)例子來(lái)使用結(jié)構(gòu)體:

我們引用結(jié)構(gòu)體是可以這樣引用:
stu1.name="李四";
stu1.number=002;
stu1.grade=100;
上面的引用方式是成員引用,也就是普通變量方式引用,還有一種引用就是結(jié)構(gòu)體指針引用,這兩種引用的方式有很大不同,后面會(huì)講到。
指針引用時(shí)必須申明一個(gè)結(jié)構(gòu)體指針,就像在整型變量中使用指針一樣,我們需要先定義一個(gè)整型指針變量,然后使用它,這里也是一樣。
STU  *stu2;   //定義一個(gè)stu2結(jié)構(gòu)體指針變量

上面不能進(jìn)行初始化,因?yàn)槠鋵?shí)質(zhì)是一個(gè)指針,不能像變量一樣可以一起初始化(當(dāng)然,指針實(shí)質(zhì)還是變量,但是其使用不一樣,所以一般說(shuō)指針還是指指針變量)

既然是指針,那么必須指向一個(gè)內(nèi)存地址,因此指針變量使用之前必須指向一塊特定的內(nèi)存地址,結(jié)構(gòu)體指針也不例外。 那我們?cè)鯓映跏蓟Y(jié)構(gòu)體指針呢

第一種方式用動(dòng)態(tài)分配內(nèi)存的方式:

stu2=(STU*)malloc(STU);

第二種方式使用結(jié)構(gòu)體變量間接方式:

stu2=&stu1;

這樣結(jié)構(gòu)體stu2指向的就是stu1的首地址。

結(jié)構(gòu)體高級(jí)用法:

在函數(shù)中,如果參數(shù)是結(jié)構(gòu)體,那么又該怎樣使用呢,其實(shí)我們使用結(jié)構(gòu)體和使用變量是一樣的,定義如下

void swap(STU stu1,STU stu2)
{
   int exchange=0;
   exchange = stu1.grade;
   stu1.grade=stu2.grade;
   stu2.grade=exchange;
   /******
    ......
   ******/
}

這樣就可以使用結(jié)構(gòu)體變量了,但是請(qǐng)思考下面代碼結(jié)果:

STU stu3={"王五",003,80};
swap(stu1,stu3);

執(zhí)行這個(gè)函數(shù)兩個(gè)結(jié)構(gòu)體中的grade會(huì)交換么? 結(jié)果是不會(huì)。 這里就和函數(shù)中講解的是一樣的,那么我們?cè)趺床拍軐⑵浣粨Q呢,在普通函數(shù)中給的方法是使用指針,因此這里我們同樣可以使用指針來(lái)操作,我們必須將函數(shù)的形參定義為結(jié)構(gòu)體指針變量。 如下:

STU swap(STU *stu1,STU *stu2)
{
    int exchange=0;
    exchange = stu1->grade;
    stu1->grade=stu2->grade;
    stu2->grade=exchange;

}

這樣我們使用

swap(&stu1,&stu3);

就可以將其調(diào)換位置了

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137268
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2113

    瀏覽量

    73747
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28429
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    130

    瀏覽量

    10860
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言中結(jié)構(gòu)struct的用法

    結(jié)構(gòu)數(shù)組就是具有相同結(jié)構(gòu)類型的變量集合,假如要定義一個(gè)班級(jí)40個(gè)同學(xué) 的姓名、性別、年齡和住址, 可以定義成一個(gè)結(jié)構(gòu)數(shù)組。如下所示:
    的頭像 發(fā)表于 03-31 11:45 ?3626次閱讀

    結(jié)構(gòu)使用方法

    雖然粉絲最后都理解了,但是仍想趁著這個(gè)機(jī)會(huì)整理一下結(jié)構(gòu)用法,希望能夠?qū)側(cè)胄械耐瑐冇兴鶐椭?/div>
    的頭像 發(fā)表于 09-28 15:43 ?1652次閱讀

    C語(yǔ)言結(jié)構(gòu)(struct)用法詳解

    在實(shí)際的開(kāi)發(fā)過(guò)程中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型,此時(shí)數(shù)組是不能夠滿足需求了。因?yàn)閿?shù)組中各元素的類型必須是一致的。為了解決這個(gè)需求,C中給出了另一種數(shù)據(jù)類型-`結(jié)構(gòu)`,每一個(gè)成員可以是任意一種數(shù)據(jù)類型。
    的頭像 發(fā)表于 02-21 10:14 ?2329次閱讀
    C語(yǔ)言<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>(struct)<b class='flag-5'>用法</b>的<b class='flag-5'>詳解</b>

    C語(yǔ)言-結(jié)構(gòu)對(duì)齊詳解

    `C語(yǔ)言-結(jié)構(gòu)對(duì)齊詳解朱有鵬1、結(jié)構(gòu)為何要對(duì)齊訪問(wèn)訪問(wèn)結(jié)構(gòu)
    發(fā)表于 07-12 16:41

    如何定義結(jié)構(gòu)?

    什么是結(jié)構(gòu),如何定義結(jié)構(gòu)? 溫馨提示: 請(qǐng)從以下鏈接中的帖子學(xué)習(xí)相關(guān)內(nèi)容并進(jìn)行回答,其他地方得到的答案不能作為標(biāo)準(zhǔn)答案,僅能做為補(bǔ)充說(shuō)明,七天之內(nèi)答案不可見(jiàn),答題的童鞋有七天
    發(fā)表于 05-08 05:55

    一文詳解ADC的外圍功能與結(jié)構(gòu)

    本文主要從ADC中用到的結(jié)構(gòu)、函數(shù)以及用法進(jìn)行講解
    發(fā)表于 01-25 07:05

    USART初始化結(jié)構(gòu)詳解

    USART 初始化結(jié)構(gòu)詳解標(biāo)準(zhǔn)庫(kù)函數(shù)對(duì)每個(gè)外設(shè)都建立了一個(gè)初始化結(jié)構(gòu),比如USART_InitTypeDef,
    發(fā)表于 02-22 06:08

    請(qǐng)教下有沒(méi)有好的用法可以將結(jié)構(gòu)和easyflash結(jié)合進(jìn)行使用?

    以往的FLASH存儲(chǔ)信息,是使用結(jié)構(gòu)先進(jìn)行分類,在通過(guò)flash寫(xiě)入庫(kù)函數(shù)進(jìn)行存儲(chǔ),而且使用的范圍比較廣如果使用easyflash是進(jìn)行鍵值的改動(dòng),改動(dòng)的代碼量會(huì)比較大,請(qǐng)教下有沒(méi)有好的用法可以將
    發(fā)表于 02-13 14:41

    OrCAD中創(chuàng)建總線及用法詳解

    OrCAD中創(chuàng)建總線及用法詳解,如何創(chuàng)建總線,菜單place->bus或者右側(cè)快捷按鈕
    發(fā)表于 12-02 10:18 ?2.6w次閱讀

    c語(yǔ)言_結(jié)構(gòu)和共同體

    這份PPT很全面講解了結(jié)構(gòu)的各種用法,夠全面,對(duì)結(jié)構(gòu)的各種應(yīng)用也舉了例子,本人已驗(yàn)證過(guò)的!另外也講解了共同體和枚舉,這兩部分描述較少。
    發(fā)表于 06-15 10:58 ?0次下載

    Typedef用法小結(jié)

    非常不錯(cuò)的文檔有著基本數(shù)據(jù)類型結(jié)構(gòu)enum與函數(shù)指針等等的Typedef相關(guān)用法.
    發(fā)表于 11-02 11:36 ?19次下載

    ADC0809用法詳解_引腳圖及功能_工作原理_內(nèi)部結(jié)構(gòu)及應(yīng)用電路

    本文主要介紹了ADC0809用法詳解_引腳圖及功能_工作原理_內(nèi)部結(jié)構(gòu)及應(yīng)用電路。ADC0809是采用CMOS工藝制造的雙列直插式單片8位A/D轉(zhuǎn)換器。A/D轉(zhuǎn)換后得到的數(shù)據(jù)應(yīng)及時(shí)傳送給單片機(jī)進(jìn)行處理。
    發(fā)表于 12-13 09:32 ?19.4w次閱讀
    ADC0809<b class='flag-5'>用法</b><b class='flag-5'>詳解</b>_引腳圖及功能_工作原理_內(nèi)部<b class='flag-5'>結(jié)構(gòu)</b>及應(yīng)用電路

    XMEGA PWM模塊多通道的用法詳解

    本文主要詳解XMEGA PWM模塊多通道的用法,具體的跟隨小編來(lái)了解一下。
    的頭像 發(fā)表于 06-18 14:09 ?4369次閱讀
    XMEGA PWM模塊多通道的<b class='flag-5'>用法</b><b class='flag-5'>詳解</b>

    CMake用法詳解

    CMake用法詳解
    發(fā)表于 10-25 16:28 ?2次下載

    C語(yǔ)言結(jié)構(gòu)(struct)用法詳解

    在實(shí)際的開(kāi)發(fā)過(guò)程中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型,此時(shí)數(shù)組是不能夠滿足需求了。因?yàn)閿?shù)組中各元素的類型必須是一致的。為了解決這個(gè)需求,C中給出了另一種數(shù)據(jù)類型-結(jié)構(gòu),每一個(gè)成員可以是任意一種數(shù)據(jù)類型。
    的頭像 發(fā)表于 11-15 16:11 ?1975次閱讀
    C語(yǔ)言<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>(struct)<b class='flag-5'>用法</b><b class='flag-5'>詳解</b>