欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c/c++中struct定義、聲明、對齊方式解析

 更新時間:2018年03月05日 08:56:55   投稿:laozhang  
這篇文章通過C/C++的兩種聲明方式開始,給大家詳細分析了/c+中struct定義、聲明、對齊方式,對此有興趣的朋友可以參考學習下。

一、定義/聲明方式

第一種:僅有結構體名,不定義/聲明變量

struct MyStruct
{
int i;
char a[10];
double b;
};

第二種:有結構體名,并聲明變量名

struct MyStruct
{
int i;
char a[10];
double b;
}structName;

struct MyStruct
{
int i;
char a[10];
double b;
};

struct MyStruct structName;

//可同時定義,如struct MyStruct structName={7,“xxxxxxxxxx”,2.1};

//也可結構體之間直接賦值,如struct MyStruct structName = structName1;

//以上為c風格,c++中struct MyStruct structName可省略struct ,也可不省。

第三種:無結構體名,直接聲明變量(對于該結構體,只需要聲明一個變量)

struct
{
int i;
char a[10];
double b;
}structName;

第四種:帶typedef

typedef struct MyStruct
{
int i;
char a[10];
double b;
}structName;

則structName=struct MyStruct,structName是結構體類型的別名,不是變量。

可以有structName aa=struct MyStruct aa;

也可以這樣:

typedef struct
{
int i;
char a[10];
double b;
}structName;

可以直接structName aa,效果跟上面一樣。

typedef主要是為了省事,對于c語言定義結構體變量時總要帶上struct關鍵字,typedef之后就不用了,而c++本身就
不需要struct關鍵字,所以貌似也不需要typedef。

二、對齊方式

如:

struct MyStruct
{
double dda1;
char dda;
int type;
};
int i = sizeof(MyStruct);

經vs2008測試i=16,“sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13”是不對的。這是VC對變量存儲的一個特殊處理,為了提高CPU的存儲速度,VC對一些變量的起始地址做了“對齊”處理。在默認情況下,VC規(guī)定各成員變量存放的起始地址相對于結構的起始地址的偏移量必須為該變量的類型所占用的字節(jié)數的倍數。

對于上例,16=8+1+3+4,剛好為結構的字節(jié)邊界數(即結構中占用最大空間的類型所占用的字節(jié)數sizeof(double)=8)的倍數,所以沒有空缺的字節(jié)需要填充。

所以整個結構的大小為:sizeof(MyStruct)=8+1+3+4=16,其中有3個字節(jié)是VC自動填充的,沒有放任何有意義的東西。

又如:

structMyStruct
{
char dda;
double dda1;
int type;
};

sizeof(MyStruct)為24=1+7+8+4+4;11個字節(jié)是vc自動填充的,最后加的4是為了讓結構的字節(jié)邊界數為結構中占用最大空間的類型所占用的字節(jié)數的倍數。

相關文章

  • C++實現LeetCode(169.求大多數)

    C++實現LeetCode(169.求大多數)

    這篇文章主要介紹了C++實現LeetCode(169.求大多數),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C++模板超詳細介紹

    C++模板超詳細介紹

    C++語言的模板技術包括函數模板和類模板,模板技術是一種代碼重用技術,函數和類是C++語言中兩種主要的重用代碼形式,這篇文章主要介紹了C++函數模板和類模板,需要的朋友可以參考下
    2022-09-09
  • Easyx實現掃雷游戲

    Easyx實現掃雷游戲

    這篇文章主要為大家詳細介紹了Easyx實現掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Cocos2d-x學習筆記之Hello World!

    Cocos2d-x學習筆記之Hello World!

    這篇文章主要介紹了Cocos2d-x學習筆記之Hello World!本文基于vs2010和C++語言開發(fā),需要的朋友可以參考下
    2014-09-09
  • C語言中對字母進行大小寫轉換的簡單方法

    C語言中對字母進行大小寫轉換的簡單方法

    這篇文章主要介紹了C語言中對字母進行大小寫轉換的簡單方法,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • C語言匯編分析傳遞結構體指針比傳遞結構體變量高效的深層原因

    C語言匯編分析傳遞結構體指針比傳遞結構體變量高效的深層原因

    本文章使用的工具是vs2010,本篇文章主要講解結構體指針作為參數傳遞與結構體變量作為參數傳遞的對比,不談值傳遞與址傳遞的概念
    2022-10-10
  • C++執(zhí)行shell命令的多種實現方法

    C++執(zhí)行shell命令的多種實現方法

    在linux系統(tǒng)下,用C++程序執(zhí)行shell命令有多種方式,主要介紹了3中方法,具有一定的參考價值,感興趣的可以了解一下
    2021-11-11
  • C語言簡易版flappy bird小游戲

    C語言簡易版flappy bird小游戲

    這篇文章主要為大家詳細介紹了C語言簡易版flappy bird小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C++實現雷霆戰(zhàn)機可視化小游戲

    C++實現雷霆戰(zhàn)機可視化小游戲

    這篇文章主要為大家詳細介紹了C++實現雷霆戰(zhàn)機可視化小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 關于UDP服務器客戶端編程流程介紹

    關于UDP服務器客戶端編程流程介紹

    大家好,本篇文章主要講的是關于UDP服務器客戶端編程流程介紹,感興趣的同學趕快來看看吧,對你有幫助的話記得收藏
    2021-12-12

最新評論