那曲檬骨新材料有限公司

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

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

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

結(jié)構(gòu)體大小的獲取

CHANBAEK ? 來(lái)源:小木編程 ? 作者:小木之 ? 2023-03-14 17:30 ? 次閱讀

結(jié)構(gòu)體大小的獲取

  • 我們使用sizeof()函數(shù)來(lái)獲取結(jié)構(gòu)體的大小
#include


struct test1
{
  int a; // 0 1 2 3
  char b; // 4
  float c; // 8 9 10 11
};


struct test2
{
  int a; // 0 1 2 3
  char b; // 4
  char d; // 5
  char e; // 6
  float c; // 8 9 10 11
};

int main()
{
  struct test1 t1;
  struct test2 t2;  
  int s1=sizeof(t1);
  int s2=sizeof(t2);
  printf("s1=%d,s2=%d",s1,s2);


  return 0;
}

輸出結(jié)果:

s1=12,s2=12
  • 從上面的例子我們可以看到,t1,t2
    兩個(gè)結(jié)構(gòu)體的內(nèi)部的成員變量構(gòu)成明明不一樣,但是最終結(jié)構(gòu)體的大小卻是相同的,都是12字節(jié)。
  • 這就是因?yàn)榻Y(jié)構(gòu)體內(nèi)存對(duì)齊的原因,使得構(gòu)成并不相同的兩個(gè)結(jié)構(gòu)體在大小上卻是相同的。
  • 其中t2中成員變量d,e占據(jù)的內(nèi)存,是在結(jié)構(gòu)體內(nèi)存對(duì)齊后補(bǔ)齊的空位,因此結(jié)構(gòu)體整體的大小并沒有增加。
  • 正是因?yàn)榻Y(jié)構(gòu)體存在內(nèi)存對(duì)齊,所以無(wú)法對(duì)結(jié)構(gòu)體進(jìn)行比較高效的直接比較,也就是無(wú)法對(duì)兩個(gè)結(jié)構(gòu)體整體進(jìn)行比較。
  • 那么為了比較結(jié)構(gòu)體,我們就想到了對(duì)結(jié)構(gòu)體內(nèi)部成員變量的比較。

結(jié)構(gòu)體的比較

既然要對(duì)結(jié)構(gòu)體的成員變量進(jìn)行比較,那么我們就要先能夠獲取成員變量。

// 獲取方法
變量名.成員變量名
// 對(duì)于t1,我們?nèi)绻胍@取t1的內(nèi)部成員變量a,那么我們就可以這樣寫:
t1.a
#include


struct test1
{
  int a;
  char b;
  float c; 
};


// 那么當(dāng)我們判斷兩個(gè)test1類型的結(jié)構(gòu)體t1,t2是否相等時(shí),就可以這么寫
int isEqual(test1 x,test1 y)
{
  if(x.a==y.a && x.b==y.b && x.c==y.c)
  {
    return 1;  // 相等返回 1
  }
  else return 0;  // 不相等返回 0
 } 

int main()
{
  struct test1 t1={1,'a',2.1};   // 聲明兩個(gè)test1類型的結(jié)構(gòu)體變量
  struct test1 t2={1,'a',2.1};
  int r=isEqual(t1,t2);  // 調(diào)用函數(shù)進(jìn)行比較
  printf("%d",r);
  return 0;
}

輸出結(jié)果:

1
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3055

    瀏覽量

    74327
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4346

    瀏覽量

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

    關(guān)注

    0

    文章

    613

    瀏覽量

    28465
  • sizeof
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

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

    關(guān)注

    1

    文章

    130

    瀏覽量

    10872
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【武漢華嵌】結(jié)構(gòu)的sizeof問(wèn)題

    和編譯器有關(guān)。就一般情況而言,主要有以下三個(gè)原則:1) 結(jié)構(gòu)變量的首地址能夠被其最寬基本類型成員的大小所整除;2) 結(jié)構(gòu)每個(gè)成員相對(duì)于
    發(fā)表于 03-22 16:26

    labview調(diào)用dll獲取硬件信息結(jié)構(gòu)求教

    想調(diào)用winmm.dll中的waveOutGetDevCaps獲取聲卡信息,但是里面有結(jié)構(gòu)數(shù)據(jù),嘗試了幾次都失敗告終,求大蝦指教。MMRESULT waveOutGetDevCaps
    發(fā)表于 01-14 10:20

    關(guān)于操作系統(tǒng)的結(jié)構(gòu)指針使用方式

    結(jié)構(gòu)的變量的指針和結(jié)構(gòu)體內(nèi)部成員的指針的關(guān)系其實(shí)他們兩者在內(nèi)存地址上是有一定的數(shù)值關(guān)系的。其實(shí)結(jié)構(gòu)變量的地址和
    發(fā)表于 10-06 23:44

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

    不是8 byte。  所以,結(jié)構(gòu)成員變量的放置順序影響著結(jié)構(gòu)所占的內(nèi)存空間的大小。一個(gè)結(jié)構(gòu)
    發(fā)表于 11-15 15:59

    使用結(jié)構(gòu)的主要作用

    結(jié)構(gòu)作用(STM32)來(lái)源:正點(diǎn)原子MDK 中很多地方使用結(jié)構(gòu)以及結(jié)構(gòu)指針,下面總結(jié)一下其
    發(fā)表于 08-24 07:54

    關(guān)于labview傳入?yún)?shù)到DLL結(jié)構(gòu)

    labview給DLL中結(jié)構(gòu)傳入?yún)?shù),要保證字節(jié)對(duì)齊下面是注意事項(xiàng),很關(guān)鍵:labview中層次結(jié)構(gòu)數(shù)據(jù)類型(例如,簇)中的數(shù)組和字符串始終包括大小信息。所以簇內(nèi)存中包含字符串的
    發(fā)表于 11-08 20:30

    結(jié)構(gòu)變量的定義與使用變量訪問(wèn)結(jié)構(gòu)成員

    知識(shí)點(diǎn)回顧關(guān)于找最大公共子串的兩種解題方法結(jié)構(gòu)的定義(3種)結(jié)構(gòu)變量的定義與使用變量訪問(wèn)結(jié)構(gòu)
    發(fā)表于 12-17 07:10

    消息隊(duì)列傳遞結(jié)構(gòu)指針和結(jié)構(gòu)異同

    FreeRTOS消息隊(duì)列 傳遞結(jié)構(gòu)指針和結(jié)構(gòu)異同1 消息隊(duì)列傳遞結(jié)構(gòu)指針和
    發(fā)表于 02-11 07:02

    C語(yǔ)言中創(chuàng)建一個(gè)結(jié)構(gòu)其實(shí)際占用的內(nèi)存空間大小是多少呢?

    際占用的內(nèi)存空間大小是多少呢?示例代碼如下:struct S{int i;char c;int j;};要正確計(jì)算結(jié)構(gòu)大小,首先需要了解數(shù)據(jù)對(duì)齊的原理。數(shù)據(jù)對(duì)齊
    發(fā)表于 09-29 11:57

    如何設(shè)計(jì)只有數(shù)據(jù)字段的結(jié)構(gòu)

    的實(shí)例時(shí),結(jié)構(gòu)的數(shù)據(jù)成員會(huì)按其聲明的順序連續(xù)存儲(chǔ)。然而,這個(gè)聲明的順序也是有學(xué)問(wèn)的,順序不同結(jié)構(gòu)大小可能有很大差別,數(shù)據(jù)成員的訪問(wèn)性能
    的頭像 發(fā)表于 08-23 09:37 ?1599次閱讀
    如何設(shè)計(jì)只有數(shù)據(jù)字段的<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>

    一個(gè)經(jīng)典的結(jié)構(gòu)和聯(lián)合體共用實(shí)例

    結(jié)構(gòu)占用的內(nèi)存大小,首先和編譯器的系統(tǒng)位數(shù)有關(guān)系,類似于CPU是 64 bits 還是 32 bits 的情形;其次,結(jié)構(gòu)需要考慮字節(jié)對(duì)
    的頭像 發(fā)表于 05-04 11:49 ?731次閱讀
    一個(gè)經(jīng)典的<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>和聯(lián)合體共用實(shí)例

    C語(yǔ)言計(jì)算結(jié)構(gòu)占用的空間大小

    計(jì)算以下兩個(gè)結(jié)構(gòu)所占空間大小分別是多少?
    發(fā)表于 08-24 16:03 ?493次閱讀

    經(jīng)典 C 語(yǔ)言編程,結(jié)構(gòu)和聯(lián)合體如何共用?

    中可以 使用 sizeof 進(jìn)行獲取,默認(rèn)為字節(jié)對(duì)齊的大小。 聯(lián)合體 聯(lián)合體的參數(shù)共享同一個(gè)內(nèi)存地址,所占的內(nèi)存大小完全是由聯(lián)合體中參數(shù)類型決定字長(zhǎng),然后數(shù)據(jù)共享,內(nèi)存共享等。 結(jié)構(gòu)
    的頭像 發(fā)表于 01-11 18:24 ?1495次閱讀
    經(jīng)典 C 語(yǔ)言編程,<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>和聯(lián)合體如何共用?

    你是否真的了解結(jié)構(gòu)占用了多少字節(jié)?

    結(jié)構(gòu)成員所占內(nèi)存空間大小一般情況下,如果想知道結(jié)構(gòu)成員的內(nèi)存占用情況需要:1、先用結(jié)構(gòu)
    的頭像 發(fā)表于 06-04 08:04 ?570次閱讀
    你是否真的了解<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>占用了多少字節(jié)?

    結(jié)構(gòu)成員的順序會(huì)影響結(jié)構(gòu)大小

    相同的結(jié)構(gòu)成員,如果把順序調(diào)整一下,會(huì)不會(huì)影響結(jié)構(gòu)大小? 答案是會(huì)的,這主要跟字節(jié)對(duì)齊有關(guān)。 比如這樣的
    的頭像 發(fā)表于 11-25 16:24 ?268次閱讀
    威尼斯人娱乐城不打烊| 威尼斯人娱乐城信誉好不好| 新手百家乐官网指点迷津| 百家乐网哪一家做的最好呀| 678百家乐官网博彩娱乐网| 大发888.com| 百家乐斗地主在哪玩| 百家乐官网网投打法| 百家乐怎么玩| 圣淘沙百家乐的玩法技巧和规则| 百家乐官网高| 百家乐官网最佳投注法下载| 大发888官网z46| 百家乐游戏试| 百家乐网上公式| 权威百家乐官网信誉网站| 伟德亚洲娱乐城| bet365娱乐场下载| 威尼斯人娱乐城怎样赢| 百家乐平注常赢法| 百家乐官网平预测软件| 太阳城百家乐官网的破解| 鼎龙娱乐城开户| 大发888 大发888| 大众百家乐娱乐城| 百家乐www| ea百家乐系统| 金盈会百家乐现金网| 圣淘沙百家乐官网的玩法技巧和规则 | 皇冠百家乐皇冠网| 百家乐官网牌盒| 网页百家乐官网的玩法技巧和规则 | 大发888怎么开户| 大发888真钱游戏下载365| 大发888娱乐场下载删除| 御匾会百家乐的玩法技巧和规则| 百家乐扫瞄光纤洗牌机扑克洗牌机扑克洗牌机 | 大发888游戏平台17| 大发888网上赌场官网| 大发888网页版登陆| 正规棋牌游戏|