今天睡了懒觉,下午四点才开始学习。今天开始学C++核心知识点,主要学习两块——内存分区、C++中的引用,这一节讲的是内存模型:
内存是有分区的,所以我们要知道哪些变量在哪些分区,如果搞混了分区,在函数调用、参数返回值的时候就一定会出现错误。
内存分区:代码区、全局区、栈区、堆区。
编写代码,编译成功,生成exe文件,在exe文件执行前,会有代码区、全局区。
代码区:
可以重复多次操作,只读不可修改
全局区:
放全局变量、静态变量(static)、常量(字符串常量、全局常量(const修饰的全局变量))。在程序结束后,由操作系统释放内存
以上可以知道,局部变量和局部常量不在全局区!!!
栈区:
由编译器开辟,放形参和局部变量。一定不要返回局部变量的地址(第一次对,后面程序释放,就会报错)
int *func() {//在栈上开辟内存
int a = 10;//加上static,变成静态变量就可以了
return &a;
}
有一个方法可以返回地址,将局部变量改为静态变量,加static
变成静态变量。
堆区:
由程序员分配释放,一般用new定义。注意:new创建的变量返回的是地址,所以需要用同类型的指针:int *p=new int(10)
就是创建了一个堆,存入数据为10,用*p可以访问该堆,对于分堆,不想用的时候,用:delete p;
释放该分区。
new创建堆数组:int *p=new int[10]
,释放的时候有点不一样:delete [] p;
加了这个,告诉程序,删除的是数组。
好的,下一节引用。这是一个完美的东东,就像指针常量,可以改参数值,不可以改指向。