c语言 offsetof函数,C 库宏 - offsetof()函数
宏offsetof
標準庫stddef.h
定義 size_t offsetof(type, member);
分析
C 庫宏 offsetof(type, member) 會生成一個類型為 size_t 的整型常量,它是一個結構成員(member)相對于結構(type)開頭的字節偏移量。成員是由 member 給定的,結構的名稱是在 type 中給定的。
type -- 這是一個 參數class類型,是結構體的名字,第二個參數member是結構體成員的名字,是一個有效的成員指示器。該宏返回結構體class中成員member的偏移量。偏移量是size_t類型的。
member -- 這是一個 class 類型中的成員指示器,就是指定的class里的一個成員量。通常通過member得到type的起始地址,即指向type類型的指針。
該宏返回類型為 size_t 的值,表示 type 中成員的偏移量,是一個無符號整數類型數值,是 sizeof 關鍵字的結果。需要注意的是,這里在實際環境中會涉及到C語言內存對齊機制。
下面的實例演示了 offsetof() 宏的用法。
#include
#include
struct address {
char name[50];
char nationality[50];
int phone;
};
int main()
{
printf("address 結構中的 name 偏移 %d 字節。\n",
offsetof(struct address, name));
printf("address 結構中的 nationality 偏移 %d 字節。\n",
offsetof(struct address, nationality));
printf("address 結構中的 phone 偏移 %d 字節。\n",
offsetof(struct address, phone));
return(0);
}
編譯并運行上面的程序,這將產生以下結果:
address 結構中的 name 偏移 0 字節。
address 結構中的 nationality 偏移 50 字節。
address 結構中的 phone 偏移100 字節。
應用
在實際的使用中,比較經典的情況:已知一個已經分配空間的結構體對象指針A中的某個成員B,使用offsetof宏,可根據B在A中的偏移量,獲取該結構體指針對象A的首地址,從而進一步使用A。
總結
以上是生活随笔為你收集整理的c语言 offsetof函数,C 库宏 - offsetof()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 中insert变量值,c – 在
- 下一篇: 用c语言编写5颗骰子任意投掷总数为15