/
...
/
/
Chapter.1 Memory Control
Search
Try Notion
Chapter.1 Memory Control
Pointer
引入
内存结构
逻辑上就是一个大数组(暂时不考虑物理实现方式), 每个空间都有Address , 存储1Byte
Memory is Everthing
当启动程序的时候, 所有东西都被加载到内存之中, CPU才能访问
当创建变量 在磁盘访问文件 都需要先存到内存之中
Memory可能是电脑能提供最关键的资源
能控制内存是至关重要的-通过指针
指针核心观念
一个指针就是地址( Address ) , 保存内存地址的整数
💡忽略指针类型: 类型仅仅是方便使用的虚构结构 Just a Interger
不要多想了
void * ptr = 0
记住指针仅仅是保存地址的整数
0不是有效的内存地址
等价于 void * ptr = NULL
在Heap上创建变量
目前我们都是在Stack上创建变量 , 我们也可以手动管理内存
在Heap上申请空间
💻代码
int main{ char *buffer = new char[8] ; memset(buffer,0,8); delete[] buffer ; }
Copy
C++
🖼️调试结果
new char[8] 创建和char[8] 一样大小的内存空间
memset(buffer,0,8) 用0填充buffer, 填充8字节
delete[] buffer 我们用数组符号创建空间, 也使用delete[]
多重指针
详见 C++ Learn 其他讨论
Reference
引入
Reference 引用仅仅为指针的扩展, 仅仅是指针的伪装
仅仅是一个语法糖
没有什么是Refence 可以做 Pointer不能做的, 仅仅是Pointer更简单
和指针不同的地方
不像指针可以成为一个空指针, 引用必须指向一个已经存在的变量
引用指向了一个变量, 就不能再更改了
Refence做为一般变量的实质
💻Example Code
int a = 5 ; int& ref = a;
Copy
C++
编译后Ref实际上不存在, Ref仅仅在我们的源代码中出现
相当于 alias ref = a
引用作为函数参数传递
形参作为外部变量的引用
就好像传递的不是外部变量的拷贝, 而是外部变量的本身
但是类似的效果
🤔引用返回:
不要返回内部的局部变量, 会随着函数退出而消失
如果需要引用返回: 返回手动创建的变量 返回输入为引用和指针输入
🤔不能用指针仅能用引用的地方?