堆、栈,指针

#include <iostream>
using namespace std;
class BasePerson
{
    public:
        static void input()
        {
            //name=NULL;
            cout<<"ftg"<<endl;
        }
        static void show_person()
        {
                input();
                //id=NULL;
                cout<<"show_person"<<input<<endl<<endl;
        }
        static char *id;
        static int *name;
    private:
};

//全局变量
int a=120;
int b=100;
int c=111;
char *BasePerson::id=(char *)&a;
int *BasePerson::name=(int *)&b;
char aa,bb,cc;

int main()
{
    //局部变量
    BasePerson pe;
    BasePerson pb;
    //a.input();
    int d=1,e=2,f=3;
    int *g=new int;
    int *h=new int;
    int *i=new int;
    char *j=new char;
    char *k=new char;
    char l=120,m=121,n=122,o=99;
    int p;
   
    //cout<<"由以下代码调试可知,全局变量的起始地址位于&a:0x403000开始的位置,应该属于静态区,依次递增,增量与数据类型有关"<<endl;
    cout<<"*****galobal:******"<<endl;
    cout<<" int a=120;\n int b=100; \n int c=111;"<<endl;
    cout<<"char aa,bb,cc;"<<endl;
    cout<<" char *BasePerson::id=(char *)&a; \n int *BasePerson::name=(int *)&b;"<<endl<<endl;

    //显示全局变量a,b,c的地址以及对象公有数据(也即类所拥有的数据)的的地址
    cout<<"BasePerson::id :\t"<<BasePerson::id<<"\t\t"<<"a:\t"<<a<<endl;
    cout<<"&BasePerson::id :\t"<<&BasePerson::id<<'\t'<<"&a:\t"<<&a<<endl;
    cout<<"(char*)BasePerson::id:\t"<<(char*)BasePerson::id<<"\t\t"<<"&a\t"<<&a<<endl;
    cout<<"(int*)BasePerson::id :\t"<<(int*)BasePerson::id<<'\t'<<"&a:\t"<<&a<<endl<<endl;
   
    cout<<"BasePerson::name :\t\t"<<BasePerson::name<<"\t"<<"b:\t"<<b<<endl;
    cout<<"&BasePerson::name :\t\t"<<&BasePerson::name<<'\t'<<"&b:\t"<<&b<<endl;
    cout<<"(char*)BasePerson::name:\t"<<(char*)BasePerson::name<<"\t\t"<<"&b\t"<<&b<<endl;
    cout<<"(int*)BasePerson::name :\t"<<(int*)BasePerson::name<<'\t'<<"&b:\t"<<&b<<endl<<endl;
   
    cout<<"&c:"<<&c<<endl;
   
    cout<<"&aa:"<<hex<<(int)&aa<<endl<<"&bb:"<<(int)&bb<<endl<<"&cc:"<<(int)&cc<<endl<<endl;
   
    //cout<<"由以下的代码调试可得:局部变量的存储区域为栈区,开始于&pe:0x22ac4f,依次递减;堆区域的地址起于g:0x20010328,依次递增,每次增加16"<<endl;
    cout<<"*********local*********"<<endl;
    cout<<" BasePerson pe;"<<endl;
    cout<<" BasePerson pb;"<<endl;
    cout<<" int d,e,f;"<<endl;
    cout<<" int *g=new int;\n int *h=new int;\n int *i=new int; \n char *j=new char; \n char *k=new char;"<<endl;
    cout<<" char l=120,m=121,n=122,o=99; \n int p;"<<endl<<endl;
       
    //显示对象的地址   
    pe.show_person();   
    cout<<"&pe:"<<&pe<<endl<<"&pb:"<<&pb<<endl;
    cout<<"*(&pe)->name:"<<*(&pe)->name<<endl<<endl;    //取对象的首地址作为指针来操作对象中的元素
 
    //显示堆区数据的地址
    cout<<"d:"<<d<<endl<<"e:"<<e<<endl<<"f:"<<f<<endl;   
    cout<<hex<<"g:"<<g<<endl<<"h:"<<h<<endl<<"i:"<<i<<endl<<"j:0x"<<(int)j<<endl<<"k:0x"<<(int)k<<endl<<endl;
   
    //显示指向堆区数据的指针的地址
    cout<<"&d:"<<&d<<endl<<"&e:"<<&e<<endl<<"&f:"<<&f<<endl;
    cout<<"&g:"<<&g<<endl<<"&h:"<<&h<<endl<<"&i:"<<&i<<endl<<"&j:"<<&j<<endl<<"&k:"<<&k<<endl<<endl;
   
    cout<<hex<<"(int)&l:"<<(int)&l<<endl<<"(int)&m:"<<(int)&m<<endl<<"(int)&n:"<<(int)&n<<endl<<"&o:0x"<<(int)&o<<endl<<"&p:"<<&p<<endl;
}

转载于:https://my.oschina.net/libowen/blog/93278

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值