〓C++,爱好者进

来源:百度知道 编辑:UC知道 时间:2024/05/01 20:15:13
#include<iostream>
using namespace std;
void main()
{int a[3];
for(int i=0;i<3;i++)
cin>>a[i];
}
请问上面的和下面的有什么区别?什么时候用上面的,什么时候用下面的?
#include<iostream>
using namespace std;
void main()
{int* a=new int[3];
for(int i=0;i<3;i++)
cin>>a[i];
}

上面的int a[3]分配的是堆栈中的内存,堆栈是一种先进先出的数据结构,简单理解为内存的一种吧.
下面的使用的是堆中的内存.
堆栈中的内存一般分自动释放,也就是在程序结束或者函数结束后会自动释放,堆栈内存一般用于临时变量和参数传递;
从堆分配的内存需要用new 运算符来进行分配,且分配的内存不会由于函数结束自动释放,需要手动调用delete 运算符来释放,此内存一般用于分配大块内存;
堆栈是很有限的,所以分配大块内存千万不要使用堆栈来分配,比如说你这样申明变量int a[2000000],一定会发生堆栈溢出错误;而应该使用int * a = new int[20000000]来进行内存分配,这样的方法在windows上面基本上从不发生错误.

记住好的编程习惯是new 要与 delete成对使用,否则可能会让你的系统越来越慢,因为你只知道申请内存,但却从来不曾释放内存,当内存不足时只有从硬盘交换内存了,到时候你会看到你的硬盘啊,那个累呀.

上边的数组a是在栈中分配的,当函数退出的时候就会被释放
下边的指针a指向的内存是new出来的,是在堆里边分配的,需要程序员自己delete调,否则直到整个程序结束这块内存才会被释放。