相信大家对指针的用法已经很熟了,这里也不多说些定义性的东西了,只说一下指针使用中的注意事项吧。

一.在定义指针的时候注意连续声明多个指针时容易犯的错误,例如int * a,b;这种声明是声明了一个指向int类型变量的指针a和一个int型的变量b,这时候要清醒的记着,而不要混淆成是声明了两个int型指针。

二.要避免使用未初始化的指针。很多运行时错误都是由未初始化的指针导致的,而且这种错误又不能被编译器检查所以很难被发现。这时的解决办法就是尽量在使用指针的时候定义它,如果早定义的化一定要记得初始化,当然初始化时可以直接使用cstdlib中定义的NULL也可以直接赋值为0,这是很好的编程习惯。

三.指针赋值时一定要保证类型匹配,由于指针类型确定指针所指向对象的类型,因此初始化或赋值时必须保证类型匹配,这样才能在指针上执行相应的操作。

四.void * 类型的指针,其实这种形式只是记录了一个地址罢了,如上所说,由于不知道所指向的数据类型是什么所以不能进行相应的操作。其实void * 指针仅仅支持几种有限的操作:1.与另外的指针进行比较,因为void *类型里面就是存的一个地址,所以这点很好理解;2.向函数传递void *指针或从函数返回void *指针,举个例子吧,我们平时常用的库函数qsort中的比较函数cmp(个人习惯于用这个名字)中传递的两个参数就是const void *类型的,用过的应该很熟了;3.给另一个void * 类型的指针赋值。还是强调一下不能使用void * 指针操纵它所指向的对象。

五.不要将两个指针变量指向同一块动态内存。这个容易引起很严重的问题。如果将两个指针变量指向同一块动态内存,而其中一个生命期结束释放了该动态内存,这个时候就会出现问题,另一个指针所指向的地址虽然被释放了但该指针并不等于NULL,这就是所谓的悬垂指针错误,这种错误很难被察觉,而且非常严重,因为这时该指针的值是随机的,可能指向一个系统内存而导致程序崩溃。但也就是因为值是随机的,所以运行程序时有时正常有时崩溃,这一点要特别注意。

六.在动态delete释放一个指针所指向的内存后注意将该指针置空。

七.在为一个指针再次分配内存之前一定要保证它原先没有指向其他内存,防止出现内存泄漏。解决的办法是我们必须判断该指针是否为空,这时候就显示出第六条的优势,因为如果释放某内存后相应指针不置空的话就不能为其分配新内存了。所以第六条很有必要。

八.虽然程序在退出main函数时会释放所有内存空间,但对于大型程序最好还是某块内存不用了立刻释放,而不要指望系统最后的回收,因为内存泄漏会慢慢消耗系统资源直到内存不足而程序死掉。

九.在用new动态分配完内存之后一定要判断是否分配成功,分配成功后才能使用。

最后提醒两条:任何指针声明后一定要初始化;任何指针用free或delete释放之后一定要置空。

原文地址:http://blog.sina.com.cn/s/blog_9e514a9d01018fcz.html

转载:C语言指针使用的注意事项的更多相关文章

  1. (转载)c语言指针学习

    前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...

  2. [转载]c语言指针segmentation fault 指针常常错误的小地方

    http://www.cnblogs.com/qingjoin/archive/2012/03/20/2408944.html #include <stdio.h> ] = ] = ] = ...

  3. C语言指针入门知识

    C语言指针往往是C语言学习过程中最困难的地方, 最近重新理解了一下C语言的指针知识, 在此整理一下, 如果有错误请留言指正. 对于刚入门的人来说, 指针涉及方方面面, 从简单的数组到结构体, 都会用到 ...

  4. C语言指针转换为intptr_t类型

    1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...

  5. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

  6. 不可或缺 Windows Native (7) - C 语言: 指针

    [源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...

  7. C语言指针学习

    C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...

  8. 关于C语言指针的问题

    在学习关于C语言指针的时候,发现这样一个问题,代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h&g ...

  9. C语言指针类型 强制转换

    关于C语言指针类型 强制转换  引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...

随机推荐

  1. slider.js 滑动和点击事件在firefox下报错 event is not defined

    在使用layui的slider滑块控件的时候,firefox遇到了event is not defined 的情况.追究原因是因为layui的layui.js 的滑块功能依赖于silder.js,而官 ...

  2. Spring-aop实现切面的四种方式 (2)

    AOP实现方式一 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  3. Mongod启动失败修复方法

    可能的原因:上次服务未正常关闭 1.删除data/db目录下的mongo.lock文件 2.删除/tmp/mongodb-27017.sock文件

  4. SpringMVC错误小结

    No mapping found for HTTP request with URI [/SpringMVC/user.do] in DispatcherServlet with name 'spri ...

  5. 编程三基:cpu:算法,总线(io):一切皆文件;内存:运行空间

    编程三基:cpu:算法,总线:一切皆文件:内存:数据.运行空间 原文找不到了.

  6. Yii中POS和GET并用范例

    页面 <?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'add-form', 'enableAjaxValida ...

  7. 轻量级自动化运维工具Fabric的安装与实践

    一.背景环境 在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具. 这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事 ...

  8. Linux系统如何禁止普通用户切换root?

    Linux系统如何禁止普通用户切换root? 在上正文之前,我们先将一些基础的Linux用户以及用户组的相关命令: 1.添加用户 useradd [-g group] [-d user_home_di ...

  9. js 实现 文字打印效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. VC++ MFC工程中中如何将一个工程的资源(如对话框)复制到另外一个工程

    问题的提出:在工程1中用到的资源,在工程2中已有现成的.即工程1中要用到的对话框和工程2的完全相同,而工程2中对该对话框的布局已设计好.控件变量都绑定好了.但由于该对话框的控件特别多,如果在工程1中再 ...