注册 登录
编程论坛 C++教室

c++,main函数中,对象对象中的成员和普通变量地址是怎么分配的

wmg_123 发布于 2012-12-26 20:40, 375 次点击
#include<iostream>
#include<stdio.h>
using namespace std;
class A{
public:
    int i;
    int k;
public:
    int hello(){cout<<"hello\n";return 0;}
    A(int n,int m){i=n;k=m;};
};
int *f1(int j)
{
    printf("%d\n",j);
}
int main(void)
{
    int h=0;
    printf("%p\n",&h);
    A a(1,2);
    A *p=&a;
//输出对象a的地址
    printf("%p\n",&a);
//输出对象a中成员i,k地址
    printf("%d,%p,%d,%p\n",p->i,(void*)p->i,p->k,(void*)p->k);   
//main函数中普通函数的地址   
    int *qq;
    qq=f1(1);
    printf("%p\n",qq);
    printf("%p\n",(void*)p->hello());
}
5 回复
#2
wmg_1232012-12-26 20:41
这是得到的结果
0xbfb0e1bc
0xbfb0e1c8
1,0x1,2,0x2
1
0x2
hello
(nil)
#3
wmg_1232012-12-26 20:44
可以看到main中变量i和对象a的地址是有关系的
i        0xbfb0e1bc
a        0xbfb0e1c8
对象a中的数据成员i,k地址连续
i        0x1
k        0x2
但是为什么函数f1的地址也显示是0x2?
#4
rjsp2012-12-27 08:51
看过你的代码和问题,很憋屈

#5
wmg_1232012-12-27 09:10
回复 4楼 rjsp
为什么这么说啊,是我不应该这么看问题么
#6
wmg_1232012-12-27 09:14
回复 4楼 rjsp
我主要是想弄明白对象和一般变量的地址、对象的数据成员地址的关系,然后发现main中的一般函数的地址让我不理解了
1