生活随笔
收集整理的這篇文章主要介紹了
结构体问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.結構體非空問題
結構體在C語言里不允許是空的(但是在C++允許,而且是一字節大小)。一般情況下都說在C++里結構體和類沒什么區別,但是在網上搜一下,發現深究還是有區別的(結構體與類區別優秀博客點擊這里)。
2.求解結構體大小問題
1.先確定實際對其單位。
CPU周期、結構體最大成員、預編譯指令(#pragma pack(n)手動設置n,只能填1 2 4 8 16)三者中最小的為實際對齊單位。
一般32位系統默認4字節對齊,64位系統默認8字節對齊。
2.除去結構體第一個成員外,其他所有成員的地址相對于結構體地址(第一個成員地址)的偏移量必須為實際內存對齊單位或自身大小的整數倍(取兩者中較小的為基準)。
3.結構體整體大小必須是實際對齊單位的整數倍。
我們下面用示例說明:
#include<stdio.h>
struct S
{char a
;short b
;
};struct A
{char a
;int b
;
};struct B
{char a
;short b
;int c
;
};struct C
{char a
;int b
;float c
;double d
;
};struct D
{char a
;int b
;short c
;
};struct E
{int a
;char b
;
};struct F
{char a
;struct FF{char b
;double c
;};int d
;
};struct F2
{char a
;double b
;double c
;int d
;
};struct G
{char a
;char b
;char c
;int d
;
};int main()
{printf("S大小:%d\n", sizeof(struct S));printf("A大小:%d\n", sizeof(struct A));printf("B大小:%d\n", sizeof(struct B));printf("C大小:%d\n", sizeof(struct C));printf("D大小:%d\n", sizeof(struct D));printf("E大小:%d\n", sizeof(struct E));printf("F大小:%d\n", sizeof(struct F));printf("F2大小:%d\n", sizeof(struct F2));printf("G大小:%d\n", sizeof(struct G));return 0;
}
總結
以上是生活随笔為你收集整理的结构体问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。