&(((struct A*)NULL)->m_float)---offsetof
问题描述:
struct A {
int m_int;
float m_float;
};
int main(void) {
printf("%p",&(((struct A*)NULL)->m_float));
return EXIT_SUCCESS;
}
上述程序会崩溃吗???
分析:
上述程序不会崩溃。原因如下:
假设type是某个结构或者类,member是type中可访问的成员。
type *p;
p->member的地址=指针p的地址值+member在type中的偏移量 (1)
将&(((struct A*)NULL)->m_float)代入公式(1)得
&(((struct A*)NULL)->m_float)=0+4=4,所以最终会输出:0x4。
因此,可以定义如下的宏,用于不产生对象的情况下取得成员变量的偏移量。
#define offsetof(s,m) (size_t)&(((s *)0)->m)
在VC下的stddef.h中有offsetof的官方定义。
&(((struct A*)NULL)->m_float)---offsetof的更多相关文章
- nil、Nil、NULL、NSNull的区别
nil:指向一个对象的空指针,对objective c id 对象赋空值. Nil:指向一个类的空指针,表示对类进行赋空值. NULL:指向其他类型(如:基本类型.C类型)的空指针, 用于对非对象指针 ...
- Objective-C数据类型之id,SEL,BOOL,nil,NULL和NSNull
id id是指向Objective-C对象的指针,等价于C语言中的void*,可以映射任何对象指针指向他,或者映射它指向其他的对象.常见的id类型就是类的delegate属性. SEL SEL类型是 ...
- C语言typeof详解 offsetof
http://blog.chinaunix.net/uid-28458801-id-4200573.html 前言: typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常 ...
- C++ offsetof
这是一个宏,用于计算类中某个成员的地址相对于类实例的偏移量 在C++11中,要求这个类standard_layout 基本用法是这样子的: #include <stdio.h> /* pr ...
- 通过 struct 成员地址 获取 struct 结构体地址
1. 问题描述: 现在定义了一个结构体: struct Foo { int a; int b; }; Foo foo; 假如由于函数传参等原因,现在程序只能拿到 foo.b 的地址,这时想通过某种方法 ...
- struct timespec 和 struct timeval
time()提供了秒级的精确度 . 1.头文件 <time.h> 2.函数原型 time_t time(time_t * timer) 函数返回从TC1970-1-1 0:0:0开始到现在 ...
- nil、Nil、NULL与NSNull的区别--备用
我们来分别介绍一下这四种类型: 一.nil 我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉: 或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统 ...
- offsetof使用小结
先上例子 #include <stdio.h> #include <stdlib.h> /* offsetof example */ #include <stddef.h ...
- nil、Nil、NULL与NSNull的区别及应用
总结 nil:OC中的对象的空指针 Nil:OC中类的空指针 NULL:C类型的空指针 NSNull:数值类的空对象 详细解析应用如下: 1.nil 指向一个对象的指针为空 在objc.h中的定义 ...
随机推荐
- springmvc拦截器基本使用
1.HandlerExecutionChain是一个执行链,当用户的请求到达DispatcherServlet的时候,DispatcherServlet会到HandlerMapping中查找对应的Ha ...
- Centos6.5安装glusterfs3.6.2
硬件环境Centos6.5 glusterfs3.6.2 先安装必要的包 yum install flex bison 2. 下载glusterfs3.6.2 wget http://downloa ...
- 【P2401】不等数列(DP)
这个题乍一看就应该是DP,再看一眼数据范围,1000..那就应该是了.然后就向DP的方向想,经过对小数据的计算可以得出,如果我们用f[i][j]来表示前i个数有j个是填了"<" ...
- 【P2514】工厂选址(贪心)
看到题了不首先应该看看数据范围确定一下算法么,这个题的数据范围大约可以支持到O(nmlogm),所以肯定不是搜索什么的,DP貌似至少也要n^2m,所以可以想一些其他的.对于题目的输入,我们发现这些输入 ...
- EF Code-First 学习之旅 Code First Conventions
协定是一系列的默认规则用来自动配置领域中的概念模型 1:类型发现 Code-First对包含DBSet属性的类型创建表(包括这些类型的所有引用类型) public class Student { pu ...
- Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) D. Generating Sets 贪心+优先队列
D. Generating Sets time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Java中使用注释
在编写程序时,经常需要添加一些注释,用以描述某段代码的作用. 一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的 1/3 以上.因此,注释是程序源代码的重要组成部分,一定要加以重视哦! Ja ...
- git终端配置颜色
默认情况下git是黑白的. git config --global color.status auto git config --global color.diff auto git config - ...
- Composer如何安装(安装注意事项)
Composer如何安装(安装注意事项) 一.总结 一句话总结:安装的时候主要看安装错误提示: 常见的错误有: a.php需要开启openssl配置.我们打开php目录下的php.ini.将opens ...
- 在线显示office文件
微信或手机浏览器在线显示office文件 1.判断浏览器类型 HttpServletRequest req = ServletActionContext.getRequest(); String us ...