1.预防野指针的产生
当用delete释放掉分配的空间时,再去对指针进行例如解引用操作,则会产生异常;通常当指针被delete之后,应当被指定为NULL或指向其他内存位置
野指针产生的原因是,当delete时,指针所指向的内存控件被释放掉,但是指针空间并没有被释放掉;
2.不要给未初始化的指针所指向的内容赋值
例:
int* p;
*p = 1;
会产生运行时错误,p未被初始化,一定要在指针解引用之前,将指针初始化一个确定的、适当的地址。int* p = new int;
3.指针不是整数,指针不能进行算术等运算,也不能直接把一个整数赋值给一个指针,将会出现类型不匹配的错误信息,
如果要将一个地址赋值给指针,要做类型强制转换,如 int* p = (int*)0xB8000000;
4.用new分配内存空间时,当分配失败时,返回0.在C++中,值为0的指针被成为空指针。如果无法分配内存,new除返回空值指针外,
还可能引发bad_alloc异常。
5.对已经释放掉的指针(非NULL)再次使用delete,结果是不确定的
6.指针算术,指针加1相当于指针的地址加上指针所指向的数据对象占用的字节数
例:
int* p = new int[4]
p += 1;
则p指向数组的第二个元素
7.数组的动态联编与静态联编
动态联编指的是在运行时为数组分配空间,采用new[]操作符创建数组;
静态联编指的是在编译期为数组分配控件,采用数组声明的方式创建;
使用动态联编联编优于静态联编,因为在运行时才决定是否分配空间,分配多大的空间,这样可以节省内存空间,提高空间利用率
8.一般来说,cout输出时,如果个给cout提供一个指针,它将输出它的地址,但是如果给cout提供一个字符的首地址,那么将从该字符处开始打印,
直到遇到空字符("/0")为止;
在cout和多数C++表达式中,char数组名,指向char的指针和用引号括起的字符串常量,都被解释为字符串第一个字符的地址;