在C++中内存分配大概可划分为4个区:代码区,全局区,栈区,堆区。代码区和全局区都在运行前就分配好,而堆区和栈是在执行时开始分配,
代码区:用于存放二进制CPU指令,特点只读,共享。
全局区:存放数据(全局变量,静态全局变量,常量,字符常量,const其他常量)。由操作系统清理回收
栈区:存放在此的数据由编译器自动分配内存和回收
堆区:我们自行分配的内存就要从堆区拿出来,动态申请空间同样。用完的空间我们自行释放。
在一个函数里形参,局部变量都在栈区分配内存空间,当一次函数周期结束带回返回值后,编译器会回收其内存空间。所以函数返回形参,局部变量会产生错误
可以看见发现内存里的值并没有返回出来
这是分割线————————————————————————————————————
当在函数里动态申请空间时,可以和一个局部变量对比一下查看,它是否在栈上分配
可以看见我们动态申请的内存地址和局部变量地址很接近(看不惯16进制你可以像上面一样转换),Why?动态申请的内存不是在堆上的吗,首先代码中new及以后操作确实是从堆上拿出来的,但别忘了前面左值int *p可是形参啊,所以你可以理解为这是一个地址赋值再强制转换的过程,那我能返回这个指针吗?如果没有的delete是可以的返回继续用的,所以别担惊受怕了,