关于指针、数组的一些整理

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的指针和用引号括起的字符串常量,都被解释为字符串第一个字符的地址;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值