offsetof使用小结
生活随笔
收集整理的這篇文章主要介紹了
offsetof使用小结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先上例子
#include <stdio.h> #include <stdlib.h>/* offsetof example */ #include <stddef.h> /* offsetof */struct foo {char a;char b[10];char c; };int main(void) {printf ("offsetof(struct foo,a) is %d\n",(int)offsetof(struct foo,a));printf ("offsetof(struct foo,b) is %d\n",(int)offsetof(struct foo,b));printf ("offsetof(struct foo,c) is %d\n",(int)offsetof(struct foo,c));system("pause");return 0; }
?測試結果:
?
其原型
offsetof宏的定義如下:
#define offsetof(type, member) (size_t)&(((type*)0)->member) 巧妙之處在于將地址0強制轉換為type類型的指針,從而定位到member在結構體中偏移位置。編譯器認為0是一個有效的地址,從而認為0是type指針的起始地址。
在不同的嵌入式系統里,不同開發商,不同架構處理器和編譯器都有不同的offsetof定義形式:
/* Keil 8051 */#define offsetof(s,m) (size_t)&(((s *)0)->m)/* Microsoft x86 */#define offsetof(s,m) (size_t)(unsigned long)&(((s *)0)->m)/* Motorola coldfire */#define offsetof(s,memb) ((size_t)((char *)&((s *)0)->memb-(char *)0))/* GNU GCC 4.0.2 */#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
?
轉載于:https://www.cnblogs.com/libra13179/p/9183404.html
總結
以上是生活随笔為你收集整理的offsetof使用小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孩子抚养费一个月多少钱啊?
- 下一篇: redis 安装启动及设置密码windo