1. 程式人生 > >結構體及共用體的大小

結構體及共用體的大小

結構體:
第一個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始,如:int( 在32位機中為4位元組,64位機中為8位元組)要從4或8的整數倍地址開始儲存,需補齊。

struct A                               
{                                     // 所佔記憶體大小
    char ch;                         //    1+3
    int a;                          //      4
}                                  //    1+3+4=8

共用體(聯合體):
各個成員以同一個地址開始存放,每一個時刻只可以儲存一個成員,所以只需取佔記憶體最大的作為聯合體的大小。長度為聯合體中元型別(如陣列,取其型別的資料長度)最大的變數長度的整數倍,且要大於等於其最大成員所佔的儲存空間。

union B                                // 所佔記憶體大小
{
    char a;                                //1
    int b[5];// 元長度:4                  //4*5             
    double c;                             // 8
int d[3]; //元長度:4 //4*3 } //20+4

例:下面結構體

struct s1                           // 所佔記憶體大小   {                                                          
    char ch,*ptr;                     // 1+3,4
    union
    {
        short a,b;                     //(2,2
unsigned int c:2,d:1; //2,1) }; //2+2 struct s1 *next; //4 };
 sizeof(struct s1)的值 :1+3+4+2+2+4 = 16 位元組

相關推薦

結構共用大小

結構體: 第一個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始,如:int( 在32位機中為4位元組,64位機中為8位元組)要從4或8的整數倍地址開始儲存

結構共用,枚舉所占內存大小

http 結構體 int img main printf har alt mon 結構體要註意位補齊(有4位補齊和8位補齊,默認8位) 1 #include<stdio.h> 2 #pragma pack(push) 3 #pragma pack(4)

淺談c++中結構共用的區別

ont 基本類型 erl list 變量名 ext 使用結構體 oot 數據格式 在c++中,結構體(struct)和共用體(union)是兩種很相似的復合數據類型,都可以用來存儲多種數據類型,但是兩者還有很大的區別。 結構體(struct) 結構是用戶自定

5、C_數組&字符串&結構&共用&枚舉

常用 字節對齊 底層 不知道 div 修改 自動 當我 stdio.h 程序中內存從哪裏來 三種內存來源:棧(stack)、堆(heap)、數據區(.date); 棧(stack) 運行自動分配、自動回收,不需要程序員手工幹預; 棧內存可以反復使用;

11、C語言之結構共用

結構體數組 結構體 float add font sco 規則 student mon 一、結構體   結構體:是一種自定義的構造數據類型   用途:把不同類型的數據組合成一個整體。     結構體類型定義:     struct [結構體名]    {       類型識

字節對齊-------結構共用

C/C++字節對齊結構體字節對齊:(結構體成員的數據類型為基本數據類型(int,double,char,short,long等))結構體的總大小是結構體成員中最寬基本數據類型大小的整數倍#include<iostream>using namespace std;struct S0{int a;ch

結構共用。面試必用

地址 類型 有一個 不同類 作用域 圖片 將不 har 存儲 結構體:將不同類型得數據有序地組合在一起,構造出一個新的數據類型,這種形式稱為結構體。 結構體是多種類型組合得數據類型。 還有一個比較重要得知識點:結構體類型得靜態方法 在結構體中說明得靜態成員屬於引用性

C語言高階篇 - 6.陣列&字串&結構&共用&列舉

1.程式中記憶體從哪裡來1 1.1、程式執行需要記憶體支援 ()對程式來說,記憶體就是程式的立足之地(程式是被放在記憶體中執行的);程式執行時需要記憶體來儲存一些臨時變數。 1.2、記憶體管理最終是由作業系統完成的 (1)記憶體本身在物理上是一個硬體器件,由硬體系統提供。 (2)

C語言(三 字串、結構共用、輸入輸出)

字串 字串是儲存了一些字元,最後以null(’/0’)結尾的一維字元陣列。 char str[6] = {'h','e','l','l','o','/0'}; char str[ ] = "hello" ; 還有一些字串操作函式: 1、strcpy(s1,s2) 複製s2到s1 2

《5.陣列&字串&結構&共用&列舉》

《5.陣列&字串&結構體&共用體&列舉》 第一部分、章節目錄 4.5.1.程式中記憶體從哪裡來1 4.5.2.程式中記憶體從哪裡來2 4.5.3.程式中記憶體從哪裡來2 4.5.4.程式中記憶體從哪裡來4 4.5.5.C語言的字串型別 4.5.6.字串和字

結構共用和列舉型別(一)

定義描述三維座標點(x,y,z)的結構體型別變數,完成座標點的輸入和輸出,並求出兩點之間的距離   程式碼如下: #include <iostream> #include <cmath> #define N 2 using namespace std; stru

結構共用01

目錄 概述 定義結構體型別變數的方法 結構體變數的引用 結構體變數的初始化 結構體陣列 指向結構體型別資料的指標 用指標處理連結串列 共用體 列舉型別 用typedef定義型別   1.概述問題定義:有時需要將不同型別的資料組合成一個有機的

C程式設計 | 結構共用和連結串列

一、定義和使用結構體變數 1、自己建立結構體型別 C語言允許使用者自己建立由不同型別資料組成的組合型的資料結構,它稱為結構體(structre)。 例如在程式中要用的如下圖所示的資料結構,可以在程式中自己建立一個結構體型別: struct Student

C結構共用、列舉

一、結構體三種定義方式 1、先宣告結構體型別,再定義變數名 struct student { int num; char name[20]; char sex; int age; char addr[30]; } struct student student1

1-C語言之結構共用、列舉

一、關鍵字說明         C語言有32個關鍵字,C語言通過關鍵字的使用使編譯器進行相關的操作          結構體對應關鍵字struct          共用體(聯合體)對應的關鍵字是union          列舉型別對應的關鍵字是enum 二、結構

C 語言中的結構共用(聯合體)

本文主要總結了譚浩強主編的《C 程式設計》教材中結構體和共用體相關章節的內容。 在 C 語言中, 結構體(struct) 是一個或多個變數的集合,這些變數可能為不同的型別,為了處理的方便而將這些變數組織在一個名字之下。由於結構體將一組相關變數看作一個單元而不是各自獨立的實體,因此結構體有助於組織複雜的資料,

C++中的共用(union)結構解析與結構(struct)共用(union) 的區別

共用體(union) 一、 基礎概念 有時需要使幾種不同型別的變數存放在同一段記憶體單元中。雖然在同一段記憶體中不同資料型別所佔位元組數不同,但都從同一地址開始存放,也就是使用了覆蓋技術,幾個變數互相覆蓋。這種使幾個不同的變數共佔一段記憶體的結構,稱為共同體型別的結構(也稱

C++結構共用

例如 union one4all {       int int_val;       long long_val;       double double_val; }; 可以使用one4all變數來儲存int、long 或double,條件是在不同的時間進行。 定義一個共用體變數,one4all pai

C語言之結構共用、列舉

結構體的基本格式如下:#include <stdio.h> struct student //結構體型別的說明與定義分開。 宣告 { int age; /*年齡*/ float score; /*分數*/ char sex; /*性別*/ }; int main() {

重拾C語言——結構共用

結構體:不同型別變數的集合 陣列:相同型別變數的集合struct長度=最後一個成員大小+最後一個成員偏移量+填充值; 結構體中的成員的偏移量需是自身長度的整數倍(不夠就填充); 結構體總長度必須是佔記憶體最大的成員的長度的整數倍。 三種方式定義結構體: 1.struct