獲取結構體成員變數所佔的記憶體空間大小的巨集定義

2021-10-07 10:36:44 字數 610 閱讀 2618

#define member_size(type, member) sizeof(((type *)0)->member)
說明如下:

type:表示結構體型別名。

member:表示結構體成員變數名。

(type *) 0:0被強制轉換了,轉換成了乙個type型別的結構體的指標。

c標準庫有乙個巨集定義:offsetof(),該巨集的宣告如下:

#include offsetof(type, member)
功能:計算乙個結構體成員變數相對於結構體開頭的位元組偏移量,會返回乙個型別為size_t的整型常量。

該巨集的實現如下:

#ifndef offsetof

#define offsetof(type, member) ((size_t) &((type *)0)->member)

#endif

說明如下:

type:表示結構體型別名。

member:表示結構體成員變數名。

剖析linux核心中的巨集 — offsetof()

關於結構體中有共用體成員時所佔記憶體容量的計算

今天碰到乙個面試題,題目如下 include typedef union data typedef struct list int main 當然不是原題,但形式差不多,當時我理解有誤,最初我是這樣理解的,首先看union,最大的應該是short b 5 它佔10個位元組,然後轉到struct中,l...

結構體成員的記憶體對齊

include void printf arr quint8 data,int len,quint8 base num if 16 base num printf n struct frame big struct frame small struct frame union union int m...

關於結構體中各個變數在記憶體中所佔空間

首先,我們來看一下下面這段 include intmain part1 struct bpart one printf d d sizeof part1 sizeof part one return0 我們不妨假設這兩個結構體所佔記憶體位元組數為其包含的各個變數所佔位元組數的代數和,那麼,執行結果應...