栈区注意事项
1、不要返回局部变量地址
2、栈区的数据由编译器管理开辟和释放
编译器:vs2010
输出结果如果有所不同,可以试着查阅编译器的文档。版本不同可能导致结果不同
#include<iostream>
using namespace std;
int* func(int b)//形参数据也会放在栈区
{
int a=10; //局部变量
//存放在栈区,栈区的数据在函数执行完后自动释放
return &a; //返回局部变量的地址
}
int main()
{
int b=1;
//接受func函数的返回值
int *p=func(b);
cout<<*p<<endl;
//第一次正常输出是因为编译器做了一次保留
cout<<*p<<endl;
//第二次数据不再保留
system("pause");
return 0;
}