游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1844|回复: 3

一位c++新手的问题, 各位大哥帮忙看看

[复制链接]

13

主题

66

帖子

85

积分

注册会员

Rank: 2

积分
85
发表于 2004-3-24 16:43:00 | 显示全部楼层 |阅读模式
class myclass
{
public:
      void f(){};
      void ff(){};
      int _i;
      static int _k;
};

int myclass::_k = 555;

int main()
{
        void (myclass::*pf)() = &myclass::f;
        void (myclass::*pff)() = &myclass::ff;
        int  myclass::*p_i = &myclass::_i;
        int  *p_k = &myclass::_k;
   
        cout <<  pf << ' '<< pff << ' ' << p_i << ' ' << p_k;
}

前三个地址 为什么是一样的 值????

5

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
发表于 2004-3-24 17:13:00 | 显示全部楼层

Re:一位c++新手的问题, 各位大哥帮忙看看

你的类没有对象,前三个地址都是类的起始地址
静态数据成员无论创建对象与否,都分配内存。

13

主题

66

帖子

85

积分

注册会员

Rank: 2

积分
85
 楼主| 发表于 2004-3-24 19:25:00 | 显示全部楼层

Re:一位c++新手的问题, 各位大哥帮忙看看


class myclass
{
public:

      int _i;
      int _t;
};


int main()
{
       int  myclass::*p_i = &myclass::_i;
       int  myclass::*p_t = &myclass::_t;
       myclass aaa;
       cout << p_i << ' ' << p_t << endl;
       cout << &(aaa.*p_i) << ' ' << &(aaa.*p_t) << endl;
        
       aaa.*p_t = 444;
       aaa.*p_i = 666;
       cout << aaa.*p_i << ' '<< aaa.*p_t << endl;  
}

ok, 但我还是迷糊, 既然 p_i == p_t , 那么就可以推出 aaa.*p_i  == aaa.*p_t
再可以推出 &(aaa.*p_i)  == &(aaa.*p_t)
但实际上   &(aaa.*p_i)  != &(aaa.*p_t)   

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-3-26 18:26:00 | 显示全部楼层

Re:一位c++新手的问题, 各位大哥帮忙看看

你都没有把类实例化,怎么能取得到地址呢?取到的只是类成员在类中的偏移罢了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-16 10:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表