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

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é)數的倍數。

相關文章

  • Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細使用方法與實例

    Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細使用方法與實例

    這篇文章主要介紹了Qt GUI圖形圖像開發(fā)之QT表格控件QTableView詳細使用方法與實例,需要的朋友可以參考下
    2020-03-03
  • C++中CopyFile和MoveFile函數使用區(qū)別的示例分析

    C++中CopyFile和MoveFile函數使用區(qū)別的示例分析

    這篇文章主要介紹了C++中CopyFile和MoveFile函數使用區(qū)別的示例分析,CopyFile表示將文件A拷貝到B,如果B已經存在則覆蓋,MoveFile表示將文件A移動到。對此感興趣的可以來了解一下
    2020-07-07
  • C語言入門之指針用法教程

    C語言入門之指針用法教程

    這篇文章主要介紹了C語言入門之指針用法教程,主要對C語言中指針的本質及常見用法做了較為通俗易懂的分析,是后續(xù)深入學習C語言的基礎,需要的朋友可以參考下
    2014-09-09
  • C++學習之指針的使用詳解

    C++學習之指針的使用詳解

    這篇文章主要為大家詳細介紹了C++中指針的相關知識,文中的示例代碼講解詳細,對我們的學習或工作有一定的價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C語言模擬實現動態(tài)通訊錄

    C語言模擬實現動態(tài)通訊錄

    本文主要介紹了C語言模擬實現動態(tài)通訊錄,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C/C++深入講解內存管理

    C/C++深入講解內存管理

    本章主要介紹C語言與C++的內存管理,以C++的內存分布作為引入,介紹C++不同于C語言的內存管理方式(new?delete對比?malloc?free),感興趣的朋友來看看吧
    2022-05-05
  • C++適用入門同學的模板講解

    C++適用入門同學的模板講解

    人們需要編寫多個形式和功能都相似的函數,因此有了函數模板來減少重復勞動;人們也需要編寫多個形式和功能都相似的類,于是?C++?引人了類模板的概念,編譯器從類模板可以自動生成多個類,避免了程序員的重復勞動
    2022-07-07
  • 利用C語言實現單詞文本計數

    利用C語言實現單詞文本計數

    這篇文章主要為大家詳細介紹了如何編寫一個C語言程序,用于統(tǒng)計一個文本文件中每個單詞出現的次數,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • C++利用inotify+epoll實現異步文件監(jiān)控的方法

    C++利用inotify+epoll實現異步文件監(jiān)控的方法

    這篇文章講給大家詳細介紹一下C++利用inotify+epoll實現異步文件監(jiān)控的方法,inotify是一種異步文件監(jiān)控機制,文章通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2023-08-08
  • C++ 創(chuàng)建桌面快捷方式 開始菜單的實現代碼

    C++ 創(chuàng)建桌面快捷方式 開始菜單的實現代碼

    這篇文章介紹了C++ 創(chuàng)建桌面快捷方式,開始菜單的實現代碼,需要的朋友可以參考一下
    2013-06-06

最新評論

资源县| 青海省| 鸡东县| 三门峡市| 黄冈市| 遵义县| 镇远县| 仪陇县| 宽城| 蒙城县| 酉阳| 中山市| 印江| 开原市| 仁寿县| 沙河市| 同心县| 甘肃省| 达日县| 宜宾市| 铜山县| 渭源县| 罗定市| 美姑县| 延长县| 绥江县| 金门县| 汶川县| 汉中市| 清苑县| 嵊州市| 南充市| 连山| 兴城市| 奈曼旗| 芦溪县| 洪泽县| 房产| 获嘉县| 长垣县| 抚顺市|