3、程序运行后.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //栈区:
  2. //由编译器自动分配释放,存放函数的参数值、局部变量等
  3. //注意事项 : 不要返回局部变量的地址,栈区开辟的数据由编译器自动释放
  4. #if 0
  5. #include <iostream>
  6. int * func(int b) //形参数据也会放在栈区
  7. {
  8. b = 100;
  9. int a = 10; //局部变量 存放在栈区,栈区的数据在函数执行完之后自动释放
  10. return &a; //返回局部变量的地址
  11. }
  12. int main()
  13. {
  14. //接受func函数的返回值
  15. int* p = func(1);
  16. std::cout << *p << std::endl; //第一次可以打印正确的数字是因为编译器做了保留
  17. std::cout << *p << std::endl; //第二次这个数据就不再保留
  18. system("pause");
  19. return 0;
  20. }
  21. //堆区
  22. //由程序员分配释放,若程序员不是放,程序结束时由操作系统回收
  23. //在C++中主要利用new在堆区开辟内存
  24. #include <iostream>
  25. int* func()
  26. {
  27. //利用new关键字可以将数据开辟到堆区
  28. //指针 本质也是 局部变量 ,放在栈上 , 指针保存的数据是在堆区
  29. int *p = new int(10);
  30. return p;
  31. }
  32. int main()
  33. {
  34. //在堆区开辟数据
  35. int *p = func();
  36. std::cout << *p << std::endl;
  37. system("pause");
  38. return 0;
  39. }
  40. #endif // 0
  41. //总结:
  42. //堆区数据由程序员开辟和释放
  43. //堆区数据利用new关键字进行开辟内存