转载:C语言指针使用的注意事项

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

转载:C语⾔指针使⽤的注意事项
相信⼤家对指针的⽤法已经很熟了,这⾥也不多说些定义性的东西了,只说⼀下指针使⽤中的注意事项吧。

⼀.在定义指针的时候注意连续声明多个指针时容易犯的错误,例如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释放之后⼀定要置空。

相关文档
最新文档