C++,类的对象,其地址,栈上还是堆上?

 地址,存贮空间,指针自身在哪里,指针指向的存储空间的地址是? 大小是?

#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.  栈上地址 是由高地址向地址派发空间的.

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值