sizeof 聯合 值的理解

2021-04-03 01:38:22 字數 2177 閱讀 7740

sizeof(聯合)值的理解

先來看各種型別在記憶體中所占用的空間大小

#include

int main(void)

執行結果(單位是位元組):

int    sizeof:4

char   sizeof:1

float  sizeof:4

double sizeof:8

再寫乙個聯合的例子,並列印出最終值:

#include

int main(void)

date;

date max;

printf("the union date sizeof:%d/n/n",sizeof(max));

printf("int    sizeof:%d/n",sizeof(int));

printf("char   sizeof:%d/n",sizeof(char));

printf("float  sizeof:%d/n",sizeof(float));

printf("double sizeof:%d/n",sizeof(double));

}執行結果:

the union date sizeof:24

int    sizeof:4

char   sizeof:1

float  sizeof:4

double sizeof:8

max的值為24位元組對照上面給出的型別大小不難得出結果:

int為4,陣列i有5個元素,在記憶體中的結構為:

char  |||||

int   |4  |4  |4  |4  |4  |

double|   8   |

如果沒有double,按4位元組對齊,但是偏偏還有乙個double,按8位元組對齊,增加2個8位元組

char  |||||

int   |4  |4  |4  |4  |4  |

double|   8   |   8   |   8   |

int為了能和double對齊,再增加乙個4位元組

char  |||||||||||||||||||||||||

int   |4  |4  |4  |4  |4  |4  |

double|   8   |   8   |   8   |

所以sizeof(max)最終值為3 x 8=24位元組

再將陣列i中的元素數量改為7,看看最終結果

#include

int main(void)

date;

date max;

printf("the union date sizeof:%d/n/n",sizeof(max));

printf("int    sizeof:%d/n",sizeof(int));

printf("char   sizeof:%d/n",sizeof(char));

printf("float  sizeof:%d/n",sizeof(float));

printf("double sizeof:%d/n",sizeof(double));

}執行結果:

the union date sizeof:32

int    sizeof:4

char   sizeof:1

float  sizeof:4

double sizeof:8

max的值為32

int為4,陣列i有7個元素,在記憶體中的結構為:

char  |||||

int   |4  |4  |4  |4  |4  |4  |4  |

double|   8   |

但是還有乙個double,按8位元組對齊,增加3個8位元組

char  |||||||||||||||||||||||||||||||||

int   |4  |4  |4  |4  |4  |4  |4  |

double|   8   |   8   |   8   |   8   |

int為了能和double對齊,再增加乙個4位元組

char  |||||||||||||||||||||||||||||||||

int   |4  |4  |4  |4  |4  |4  |4  |4  |

double|   8   |   8   |   8   |   8   |

所以sizeof(max)最終值為4 x 8=32位元組

C語言 關於sizeof返回值的理解

1.運算子 sizeof 的返回值是 unsigned 型別,x 是 int 型別,比較時會將 x 公升級為 unsigned 型別,而 1 變為 unsigned 型別是乙個很大的整數。2 sizeof操作符能夠得到乙個結構的整體長度,包括因邊界對齊而跳過的那些位元組。3 sizeof 和 str...

求解sizeof的值

以下三條規則 資料成員對齊規則 結構 struct 或聯合 union 的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小或者成員的子成員大小 只要該成員有子成員,比如說是陣列,結構體等 的整數倍開始 比如int在 位機為 位元組,則要從 的整數倍位址...

sizeof 的結果值

以前一直以為sizeof 就是求乙個陣列的長度,例如乙個陣列a 5 sizeof a 5 現在才發現大錯特錯。實踐出真理,還是直接輸出來的直觀。include include includeusing namespace std struct num struct num1 struct num2 ...