#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;
}