首页 > 其他 > 详细

内存偏移

时间:2015-04-18 01:02:21      阅读:333      评论:0      收藏:0      [点我收藏+]
 1 #include "stdafx.h"
 2 
 3 class A
 4 {
 5 public:
 6     A(){m_a = 1; m_b = 2;}
 7     void fun(){printf("%d %d\n", m_a, m_b);}
 8 private:
 9     int m_a;
10     int m_b;
11 };
12 
13 class C
14 {
15 public:
16     C(){m_c = 3;}
17     void fun(){printf("%d\n", m_c);}
18 private:
19     int m_c;
20 };
21 
22 int _tmain(int argc, _TCHAR* argv[])
23 {
24     A a;    
25     C c;
26     printf("0x%p\n", &a);
27     printf("0x%p\n", &c);
28     
29     C *pc = (C *)&a;
30     printf("0x%p\n", pc);
31 
32     pc->fun();
33 
34     return 0;
35 }

输出:

0x0018FF24

0x0018FF18

0x0018FF24

1

 

分析:

C *pc = (C *)&a;
强制用C的内存模型解释a的地址指向的内容, pc->fun()调用C::fun()打印m_c时,编译器对m_c的认识就是m_c是距离对象首地址偏移量为0的数据。

 

内存偏移

原文:http://www.cnblogs.com/kira2will/p/4436458.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!