在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 漫談c語(yǔ)言結(jié)構(gòu)體

            漫談c語(yǔ)言結(jié)構(gòu)體

            作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
            相信大家對(duì)于結(jié)構(gòu)體都不陌生。在此,分享出本人對(duì)C語(yǔ)言結(jié)構(gòu)體的研究和學(xué)習(xí)的總結(jié)。如果你發(fā)現(xiàn)這個(gè)總結(jié)中有你以前所未掌握的,那本文也算是有點(diǎn)價(jià)值了。當(dāng)然,水平有限,若發(fā)現(xiàn)不足之處懇請(qǐng)指出。代碼文件test.c我放在下面。

            在此,我會(huì)圍繞以下2個(gè)問(wèn)題來(lái)分析和應(yīng)用C語(yǔ)言結(jié)構(gòu)體:

            本文引用地址:http://www.biyoush.com/article/201612/324476.htm

            1.C語(yǔ)言中的結(jié)構(gòu)體有何作用

            2.結(jié)構(gòu)體成員變量?jī)?nèi)存對(duì)齊有何講究(重點(diǎn))

            對(duì)于一些概念的說(shuō)明,我就不把C語(yǔ)言教材上的定義搬上來(lái)。我們坐下來(lái)慢慢聊吧。

            ==============================================================================================================================================

            1.結(jié)構(gòu)體有何作用

            三個(gè)月前,教研室里一個(gè)學(xué)長(zhǎng)在華為南京研究院的面試中就遇到這個(gè)問(wèn)題。當(dāng)然,這只是面試中最基礎(chǔ)的問(wèn)題。如果問(wèn)你你怎么回答?

            我的理解是這樣的,C語(yǔ)言中結(jié)構(gòu)體至少有以下三個(gè)作用:

            (1)有機(jī)地組織了對(duì)象的屬性。

            比如,在STM32的RTC開(kāi)發(fā)中,我們需要數(shù)據(jù)來(lái)表示日期和時(shí)間,這些數(shù)據(jù)通常是年、月、日、時(shí)、分、秒。如果我們不用結(jié)構(gòu)體,那么就需要定義6個(gè)變量來(lái)表示。這樣的話程序的數(shù)據(jù)結(jié)構(gòu)是松散的,我們的數(shù)據(jù)結(jié)構(gòu)最好是“高內(nèi)聚,低耦合”的。所以,用一個(gè)結(jié)構(gòu)體來(lái)表示更好,無(wú)論是從程序的可讀性還是可移植性還是可維護(hù)性皆是:

            typedefstruct//公歷日期和時(shí)間結(jié)構(gòu)體

            {

            vu16 year;

            vu8 month;

            vu8 date;

            vu8hour;

            vu8min;

            vu8sec;

            }_calendar_obj;

            _calendar_objcalendar;//定義結(jié)構(gòu)體變量

            (2)以修改結(jié)構(gòu)體成員變量的方法代替了函數(shù)(入口參數(shù))的重新定義。

            如果說(shuō)結(jié)構(gòu)體有機(jī)地組織了對(duì)象的屬性表示結(jié)構(gòu)體“中看”,那么以修改結(jié)構(gòu)體成員變量的方法代替函數(shù)(入口參數(shù))的重新定義就表示了結(jié)構(gòu)體“中用”。繼續(xù)以上面的結(jié)構(gòu)體為例子,我們來(lái)分析。假如現(xiàn)在我有如下函數(shù)來(lái)顯示日期和時(shí)間:

            voidDsipDateTime(_calendar_objDateTimeVal)

            那么我們只要將一個(gè)_calendar_obj這個(gè)結(jié)構(gòu)體類(lèi)型的變量作為實(shí)參調(diào)用DsipDateTime()即可,DsipDateTime()通過(guò)DateTimeVal的成變量來(lái)實(shí)現(xiàn)內(nèi)容的顯示。如果不用結(jié)構(gòu)體,我們很可能需要寫(xiě)這樣的一個(gè)函數(shù):

            voidDsipDateTime(vu16 year,vu8 month,vu8 date,vu8hour,vu8min,vu8sec)

            顯然這樣的形參很不可觀,數(shù)據(jù)結(jié)構(gòu)管理起來(lái)也很繁瑣。如果某個(gè)函數(shù)的返回值得是一個(gè)表示日期和時(shí)間的數(shù)據(jù),那就更復(fù)雜了。這只是一方面。

            另一方面,如果用戶需要表示日期和時(shí)間的數(shù)據(jù)中還要包含星期(周),這個(gè)時(shí)候,如果之前沒(méi)有用機(jī)構(gòu)體,那么應(yīng)該在DsipDateTime()函數(shù)中在增加一個(gè)形參vu8week:

            voidDsipDateTime(vu16 year,vu8 month,vu8 date,vu8week,vu8hour,vu8min,vu8sec)

            可見(jiàn)這種方法來(lái)傳遞參數(shù)非常繁瑣。所以以結(jié)構(gòu)體作為函數(shù)的入口參數(shù)的好處之一就是

            函數(shù)的聲明voidDsipDateTime(_calendar_objDateTimeVal)不需要改變,只需要增加結(jié)構(gòu)體的成員變量,然后在函數(shù)的內(nèi)部實(shí)現(xiàn)上對(duì)calendar.week作相應(yīng)的處理即可。這樣,在程序的修改、維護(hù)方面作用顯著。

            typedefstruct//公歷日期和時(shí)間結(jié)構(gòu)體

            {

            vu16 year;

            vu8 month;

            vu8 date;

            vu8 week;

            vu8hour;

            vu8min;

            vu8sec;

            }_calendar_obj;

            _calendar_objcalendar;//定義結(jié)構(gòu)體變量

            (3)結(jié)構(gòu)體的內(nèi)存對(duì)齊原則可以提高CPU對(duì)內(nèi)存的訪問(wèn)速度(以空間換取時(shí)間)。
            并且,結(jié)構(gòu)體成員變量的地址可以根據(jù)基地址(以偏移量offset)計(jì)算。我們先來(lái)看看下面的一段簡(jiǎn)單的程序,對(duì)于此程序的分析會(huì)在第2部分結(jié)構(gòu)體成員變量?jī)?nèi)存對(duì)齊中詳細(xì)說(shuō)明。


            上一頁(yè) 1 2 3 下一頁(yè)

            關(guān)鍵詞: c語(yǔ)言結(jié)構(gòu)

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉