问题1
int i=3;这个我知道,i是存放在栈区的。
int i=new int(3);这个i是不是存放在了堆区?问题2
在C++中,比如我创建了一个类叫Person,那么Person p;就可以实例化了(在C#中要使用new),那么在C++中,这个p是
存放在堆区还是在栈区?
int i=3;这个我知道,i是存放在栈区的。
int i=new int(3);这个i是不是存放在了堆区?问题2
在C++中,比如我创建了一个类叫Person,那么Person p;就可以实例化了(在C#中要使用new),那么在C++中,这个p是
存放在堆区还是在栈区?
问题2 C#和C++一样 p的地址在栈中 实际p的开辟空间在堆中
引用:堆中,存放地址 如:数组,对象。
NET将数据类型分为值类型(value type)和引用类型(reference type)一个具有值类型(value type)的数据存放在栈内的一个变量中。即是在栈中分配内存空间,直接存储所包含的值,其值就代表数据本身。值类型的数据具有较快的存取速度。一个具有引用类型(reference type)的数据并不驻留在栈中,而是存储于堆中。即是在堆中分配内存空间,不直接存储所包含的值,而是指向所要存储的值,其值代表的是所指向的地址。当访问一个具有引用类型的数据时,需要到栈中检查变量的内容,该变量引用堆中的一个实际数据。引用类型的数据比值类型的数据具有更大的存储规模和较低的访问速度。http://topic.csdn.net/u/20101023/11/f5f04475-ebfb-423c-99ce-ad32108f4211.html
高级的的可以看 CLR via C#
堆与栈,面向对象的概念的int i=3 栈int i=new int(3);
i 栈(记录new int(3) 在堆里的地址 )
new int(3) 堆Person p = new Person();
p 栈
new Person() 堆
我为了确认我的想法,试了一下代码,结果发现没有 net int(3) 这种写法
错误 CS1729: “int”不包含采用“1”个参数的构造函数问题2:
Person p; // 在栈上构造了对象 p
Person *pp; // 在栈上为 pp 分配了空间
pp = new Person; // 在堆上构造了一个 Person 对象,并把地址赋给 pp
我的感慨,呵呵
C++现在正在入门,在C++实现面向对象的思路与数据组织,搞得我头晕;
用了一阵C#,感觉不错,迫使我对数据方法封装,IDE很友好