您当前的位置: 首页 >  c++

命运之手

暂无认证

  • 2浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【零基础学QT】【010】C++中的指针,栈和堆

命运之手 发布时间:2019-09-05 23:50:46 ,浏览量:2

C++中的内存区域

C++中的内存区域包括栈和堆两种,其中栈的空间小效率高,一般不到10M,堆的空间大但效率低,可以大到几个G 为了保证程序整体高效地运行,C++用堆来存储类对象的完整数据,用栈来存放堆对象的地址,局部变量,函数参数和返回值等 通过栈中的地址,我们可以间接访问到堆中的实际对象

通过new关键字在堆中动态创建对象

在前面的代码中,我们都是通过默认初始化和构造函数的方式来定义变量的 这样产生的变量是存放在栈中的,如果多次使用,很块栈就会被用完,程序崩溃 科学的方法,是通过new关键字,在堆中动态创建对象,用完再清理回收堆空间


	class Person {
	public:
	    string name = "me";
	    Person(string pName){
	        name = pName;
	    }
	};
	
	int main() {
	    Person p1 = Person("A");
	    Person *p2 = new Person("A");
	    return 0;
	}

指针变量与取址运算符,解引用运算符

指针变量可以存储一个对象的地址,我们通过指针可以访问对应地址存放的对象 取址运算符用于返回一个指针,该指针中保存了对象的地址 解引用运算符,可以取出指针指向的对象


	#include 
	
	using namespace std;
	
	class Object {
	public:
	    string value = "X";
	    Object(string value){
	        this->value = value;
	    };
	};
	
	int main() {
	    //在栈中定义一个对象
	    Object obj1 = Object("A");
	    //在堆中创建一个对象,new会返回一个指向该对象的指针
	    Object *obj2 = new Object("B");
	    //定义一个空指针
	    Object *p1 = nullptr;
	    //获取对象地址,并赋给指针
	    p1 = &obj1;
	    //打印指针,得到的是对象的地址
	    cout             
关注
打赏
1654938663
查看更多评论
0.0420s