C++内存机制

#include<iostream>
using namespace std;

void m_test1(void);
char* f1(void);
char* f2(void);
/*
动态存储区包含堆 和 栈
栈 的生命周期短,用于存储临时变量(函数内部定义的变量,包括主函数),速度快,由系统自动释放
避免操作已经释放的地址。
堆 的生命周期长,与程序生命同时存在,分配与释放灵活,不需要时,用delete释放。人工释放
静态存储区用于存储 静态数据、全局数据和常量,程序运行期间一直存在
*/
int main()
{
//m_test1();
//内存已经被释放,返回的为空
//cout << *f1() << endl;;
char* p=f2();
//*p = "abc"; 此处为将字符串的地址 赋给*p,故错误
p[0] = 'a';
cout << p[0] << endl;
return 0;
}

void m_test1(void)
{
//"Hello World1"为字符串常量,存储在静态存储区
//将此地址给P,p是局部变量,存储在栈中
char* p = "Hello World1";
//数组a是局部变量,一下为数组a的初始化,而非字符串常量"Hello World2"的地址赋给a;
char a[] = "Hello World2";
//p[2] = 'A'; 错误,字符串常量不可修改
a[2] = 'A';
char* p1 = "Hello World1";
cout <<"字符串地址:"<< &(*p1) << "=" << &(*p) << endl;
}

char* f1(void)
{
char* p = NULL;
char a;
p = &a;
//返回局部变量的地址不可行
//函数结束后,局部变量将被释放,此内存不能再返回
return p;
}

char* f2(void)
{
char* p = NULL;
//new这个命令是在堆中申请存储空间,一旦申请成功,
//除非你将其delete或者程序终结,这块内存将一直存在
p = new char[4];
return p;
}

posted @ 2020-03-10 16:28  *Hu*  阅读(105)  评论(0)    收藏  举报