- 1、定义不同指针类型,使用new方法,分别赋初值和动态分配内存
char* p1 = new char();//动态分配内存
int* p2 = new int(2);//变量赋初值
char* p3 = new char[5];
char* p4 = new char[5] {1, 2, 3, 4, 5};
A、 动态分配内存,存储在堆的内存区域
在函数内,用New申请的动态内存,在函数退出后仍然有效,直到被专用语句删除后,才会被释放掉;
```cpp
delete p1;
delete []p4;
注意:使用malloc函数分配的内存,则不能用delete进行释放;
如果使用过多new而不释放,会导致尺寸存储,导致内存泄漏;
B、定义好的变量,存储在栈的内存区域
在函数中,定义的变量会在函数调用时候被放入栈区中
在函数退出时候被自动释放删除掉
2、const修饰指针和修饰引用;
A:修饰引用
int a = 22;
int& b = a;//设置b为a的引用,可修改
const int&b = a;//设置b为a的静态引用,只可以进行读,不可通过b修改a
//例如,可使用静态引用进行函数传参,在函数内不允许变量修改
void function(std::<vector>const int&b)
{
}
B:修饰指针
int a = 13;
const int *p3 =&a;*
const int *p3 = (const int)&a;//不能修改指针所指向的值
//常量类型变量,只能用常量指针定义
const int a = 13;
const int *p3 = &a;
int *p3 = &a;//错误写法;
int a[] = {13,12,11,10};
int *const p =a;
p[0] = 100;
*p = 101;
C:智能指针(共享指针)
可以自动管理动态分配的内存
不使用时,自动释放分配的内存
#include<memory>
shared_ptr<int> pInt(new int(2));
cout<<*pInt;