指针
在c++中指针就是 内存地址 (十六进制的数据), 它记录着内存空间的地址, 大小是8个字节
指针的定义:
int a = 10;
int *pint;
pint = &a;
// 也可以
int *pint = &a;
其中 pint 指针变量储存的就是 a变量在内存中的地址, 可以通过*pint 解引用来效果 变量a 的值
*pint = 20;
正常来说 pint 指针变量可以直接 使用pint, 但是, 直接使用的是内存地址,所以,通过解引用,*pint 来修改变量 a 的值,注意, 不能对空指针解引用, 因为空指针什么都没指向。
指针类型
指针也是有数据类型的, 获取int类型的变量的指针使用 int 来 定义指针,string 就用string 如:
int a = 10;
int *pint = &a;
string b= "aaa";
string *pstring = &b;
如果指针类型和要获取指针的变量类型不一样会产生异常的
指针初始化
int a = 10;
int *pint;
如上,定义一个pint指针, 如果没有在定义的时候给它数据的话就会随机指向一块内存地址,所以 ,如果定义的时候不赋值的话就该 将指针设置为空指针,
int *pint = nullptr;
栈内存
c++中由程序自动向操作系统申请的内存就是栈内存,,它有自己的gc回收, 如, 在函数中定义的局部变量就是使用栈内存,当函数执行完毕后会自动的释放内存,不需要程序员管理
堆内存
在程序中需要new 创建出来的变量就是使用堆内存, 这些内存需要程序员手动创建和回收, 不像堆内存的变量,程序结束会自动回收,可以跨函数, 不像堆内存的数据,程序结束就回收了, 需记得每一个new 都要 delete ,不然会造成内存的泄漏;
动态内存创建
int a = new int(10);
申请内存空间类型要和数据类型一致
内联函数,
inline , 当函数的代码较少的时候可以使用inline 在其他函数中调用该函数的时候相当于 将整个函数体的代码插人调用语句处,就像整个函数体在调用处被重写了一遍一样, 这样的好处在于不会产生额外调用函数的开销, 不会产生压栈,弹栈开销