地址,存贮空间,指针自身在哪里,指针指向的存储空间的地址是? 大小是?
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
// 存
void setname(string s){ name = s;}
void setage(int y){age = y; }
void setaddress(string add){address = add;}
// 取
string getname(){return name;}
int getage(){return age;}
string getaddress(){return address;}
//-- 引入构造函数:初始化成员,与类同名,没有返回值
Student(string name,int age,string address)
{
this->name = name; this->age = age; this->address = address;
}
~Student(){
}
protected:
private:
string name;
int age;
string address;
};
void main()
{
// x1在栈上,存储空间 36字节
Student x1("刘莉莉x1",22,"东风路369号");
cout<<"sizeof x1 = "<<sizeof x1<<" &x1地址:"<<&x1<<endl; //36个字节
// p1自身在栈上: 空指针不指向任何空间,但是这个变量本身是在程序空间的栈上的
Student* p1 = NULL;
// p1: 即p1指向的存贮空间(堆上)的首地址:但是还没有分配空间
cout<<"sizeof p1 = "<<sizeof p1<<" p1地址:"<<p1<<endl;
// &p1, 即p1自身的地址
cout<<"sizeof p1 = "<<sizeof p1<<" &p1地址:"<<&p1<<endl;
// 向 堆 上申请了36个字节的空间,堆地址是 p1
p1 = new Student("刘莉莉p1",22,"东风路369号");
// 36字节的存储空间大小,即p1指向存贮空间(堆上)的首地址
cout<<"sizeof *p1 = "<<sizeof *p1<<" p1地址:"<<p1<<endl;
cout<<"sizeof p1 = "<<sizeof p1<<" &p1地址:"<<&p1<<endl;
cout<<"sizeof p1 = "<<sizeof p1<<" p1地址:"<<p1<<endl;
Student x2("刘莉莉x2",22,"东风路369号");
cout<<"sizeof x2 = "<<sizeof x2<<" &x2地址:"<<&x2<<endl;
delete p1;
}
//-----------------------
简化下, 仅仅 输出 位于栈上的 &x1,&p1,&x2:
void main()
{
// x1在栈上,存储空间 36字节
Student x1("刘莉莉x1",22,"东风路369号");
cout<<"sizeof x1 = "<<sizeof x1<<" &x1地址:"<<&x1<<endl; //36个字节
// p1自身在栈上: 空指针不指向任何空间,但是这个变量本身是在程序空间的栈上的
Student* p1 = NULL;
// 向 堆 上申请了36个字节的空间,堆地址是 p1
p1 = new Student("刘莉莉p1",22,"东风路369号");
// &p1, 即p1自身的地址
cout<<"sizeof p1 = "<<sizeof p1<<" &p1地址:"<<&p1<<endl;
Student x2("刘莉莉x2",22,"东风路369号");
cout<<"sizeof x2 = "<<sizeof x2<<" &x2地址:"<<&x2<<endl;
delete p1;
}
12FF50 - 12FF4C = 50 -4C = 16 -C = 16-12 =4
12FF4C - 12FF28 = 24 -----即10进制的36
可见:
1 , &x1,&p1,&x2 是 栈上连续的3个地址, 有高地址到低地址.
2. 栈上地址 是由高地址向地址派发空间的.