写在前面
内容依然来自于英文版的 C++ Primer 小弟愚钝 各路大神多多指教
相同符号不同的意义
Demo
int i = 88;
int &r = i; // &是引用符号
int *p // *表示p是一个指针
p = &i; // &是address-of(取地址)符号
*p = i; // *是dereference符号
int &r2 = *p; // &是声明的部分 *是dereference符号 ------ 这个还不太明白
空指针
空指针不指向任何对象。在尝试使用之前代码会检查指针是否为空。获得有如下方式:
int *p1 = nullptr; // 最直接的方式
int *p3 = NULL; // 不include cstdlib 也可以 书上说必须 include cstdlib 这是一个旧的方式
int *p2 = 0;
preprocessor
- 跑在编译器前的程序;
- 使用时自动用它自己的变量代替它的变量;
- 不属于命名空间 std:: 所以使用时不需要前修饰(prefix);
现代C++程序避免使用 NULL,而代为使用 nullptr表示空指针
注意事项
- int 型变量是不允许赋值给指针的,即使他是 0 也不可以;
- 未经初始化的指针是造成运行时间错误的原因之一,此时找 bug 也会很难;
- 在大多数的编译器中,使用未初始化的指针,内存中的那些字节被用做地址。使用时也是拿这个所谓的地址去找特定的对象。这个时候分辨在内存中那些由分配了的、由字节组成的地址是有效/无效是不可能的;
- 推荐的方式:先定义对象,再定义指针。如果指针谁也不指向,那么把它初始化为 nullptr 或者 0。