1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- //栈区:
- //由编译器自动分配释放,存放函数的参数值、局部变量等
- //注意事项 : 不要返回局部变量的地址,栈区开辟的数据由编译器自动释放
- #if 0
- #include <iostream>
- int * func(int b) //形参数据也会放在栈区
- {
- b = 100;
- int a = 10; //局部变量 存放在栈区,栈区的数据在函数执行完之后自动释放
-
- return &a; //返回局部变量的地址
- }
- int main()
- {
- //接受func函数的返回值
- int* p = func(1);
- std::cout << *p << std::endl; //第一次可以打印正确的数字是因为编译器做了保留
- std::cout << *p << std::endl; //第二次这个数据就不再保留
- system("pause");
- return 0;
- }
- //堆区
- //由程序员分配释放,若程序员不是放,程序结束时由操作系统回收
- //在C++中主要利用new在堆区开辟内存
- #include <iostream>
- int* func()
- {
- //利用new关键字可以将数据开辟到堆区
- //指针 本质也是 局部变量 ,放在栈上 , 指针保存的数据是在堆区
- int *p = new int(10);
- return p;
-
- }
- int main()
- {
- //在堆区开辟数据
- int *p = func();
- std::cout << *p << std::endl;
-
- system("pause");
- return 0;
- }
- #endif // 0
- //总结:
- //堆区数据由程序员开辟和释放
- //堆区数据利用new关键字进行开辟内存
|