建议5:不要忘记指针变量的初始化
可以说指针是C/C++语言编程中最给力的工具。指针,让我们直接去面对最为神秘的内存空间,赋予我们对内存进行直接操作的能力。由于指针操作执行速度快、占用内存少,众多程序员对它深爱不已。但是,它的灵活性和难控制性也让许多程序员觉得难以驾驭,以致到了谈指针色变的程度。指针就是一把双刃剑。用好了它,会给你带来诸多便利,反之,则往往会引发意想不到的问题。其中,指针的初始化就是我们应当重视的问题之一。指针应当被初始化,这是一个毋庸置疑的问题,关键是应该由谁来负责初始化,是编译器,还是程序员自己?为了更好地贯彻零开销原则(C++之父Bjarne在设计C++语言时所遵循的原则之一,
即“无须为未使用的东西付出代价”),编译器一般不会对一般变量进行初始化,当然也包括指针。所以负责初始化指针变量的只有程序员自己。
使用未初始化的指针是相当危险的。因为指针直接指向内存空间,所以程序员很容易通过未初始化的指针改写该指针随机指向的存储区域。而由此产生的后果却是不确定的,这完全取决于程序员的运气。例如下面的程序片段:
#include <iostream>
int main()
{
int *pInt;
std::cout<<pInt<<"\n";
return 0;
}
在VC++中,程序在Release模式下输出0x004080d0,而在Debug模式下输出0xcccccccc。很明显未初始化的指针指向的是一个随机的地址。如果对其执行写操作会怎样?那很有可能会直接导致程序崩溃。可以将指针初始化为某个变量的地址。需要注意的是,当用另一个变量的地址初始化指针变量时,必须在声明指针之前声明过该变量。代码片段如下所示:
int number = 0; // Initialized integer variable 
int* pNumber = &number; // Initialized pointer 
当然,我们在必要时也可以将其初始化为空指针0(NULL):
int* pNumber = NULL; // Initialized pointer as NULL
如果使用未初始化的局部变量,程序编译时会给出警告C4700:
warning C4700: 使用了未初始化的局部变量"**"
需要注意警告中的四个字“局部变量”。因为对于全局变量来说,在声明的同时,编译器会悄悄完成对变量的初始化。代码片段如下所示:
#include <iostream>
int *pInt;
int main()
{
std::cout<<pInt<<"\n";
return 0;
}
此时,程序编译不会再出现警告,程序输出:00000000。


请记住:使用未初始化的局部指针变量是件很危险的事,所以,在使用局部指针变量时,一定要

及时将其初始化。

改善C++ 程序的150个建议学习之建议5:不要忘记指针变量的初始化相关推荐

  1. 编写高质量代码改善C++程序的150个建议

    第一部分 语法篇   第1章   从C继承而来的 建议0:不用让main函数返回void main函数的返回类型是int,不是void或其它类型. 建议1:区分0的4种面孔          (1). ...

  2. 改善C++ 程序的150个建议学习之建议8:拒绝晦涩难懂的函数指针

    建议8:拒绝晦涩难懂的函数指针 在C/C++程序中,数据指针是最直接也是最常用的,理解起来也相对简单容易,但是函数指针理解起来却并不轻松.函数指针在运行时的动态调用中应用广泛,是一种常见而有效的手段. ...

  3. 寻找连通域C++程序复现(个人C++学习记录)

    本文是个人学习C++的学习记录,没学习过C++,主要通过复现程序,解决相关问题学习. 对很多概念的理解大都是通过搜索再加自圆其说,所以肯定有很多错误和理解不到位的地方,还望大佬们多多指点,小白们相互讨 ...

  4. Github即将破百万的PDF:编写高质量代码改善JAVA程序的151个建议

    代码是我们前进的基石. 废话不多说直接把本书部分内容展示出来 目录 == 第1章Java开发中通用的方法和准则/1 建议1:不要在常量和变量中出现易混淆的字母/2 建议2:莫让常量蜕变成变量12 建议 ...

  5. 转载:一位资深程序员大牛给予Java初学者的学习路线建议

    一位资深程序员大牛给予Java初学者的学习路线建议 java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来 ...

  6. 《编写高质量代码:改善c程序代码的125个建议》——第1章 数据,程序设计之根本建议1:认识ANSI C...

    本节书摘来自华章计算机<编写高质量代码:改善c程序代码的125个建议>一书中的第1章,建议1,作者:马 伟 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第1 ...

  7. java 151建议_编写高质量代码改善java程序的151个建议——导航开篇

    前言 系列文章: 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,惨不忍睹是吧.确实,人和代码一样都在成长,都在变好当中.有时候只是实现功能的编程,长 ...

  8. 编写高质量代码改善C#程序的157个建议——建议157:从写第一个界面开始,就进行自动化测试...

    建议157:从写第一个界面开始,就进行自动化测试 如果说单元测试是白盒测试,那么自动化测试就是黑盒测试.黑盒测试要求捕捉界面上的控件句柄,并对其进行编码,以达到模拟人工操作的目的.具体的自动化测试请学 ...

  9. 改善Python程序的91个建议(一)

    第 1 章 引论 建议 1:理解 Pythonic 概念 Pythonic Tim Peters 的 <The Zen of Python>相信学过 Python 的都耳熟能详,在交互式环 ...

最新文章

  1. array_multisort
  2. 深入解析Vue组件间通信
  3. MYSQL外键(Foreign Key)的使用
  4. web前端3.0时代,“程序猿”如何“渡劫升仙”?
  5. 如何查看SharePoint未知错误
  6. 爬取虎牙之一:(王者荣耀主播信息普通爬取)
  7. PPRevealSideViewController
  8. SQL模糊查询特殊符号应用及详细案例说明
  9. 你们要的二维码测试点来了,扫它!
  10. 17现代软件工程十五组第三次作业
  11. delphi listbox 使用
  12. iOS学习笔记(1)— UIView 渲染和内容管理
  13. java名片生成_HTML5 canvas绘图基础(电子名片生成器源码)
  14. 核方法概述----正定核以及核技巧(Gram矩阵推导正定核)
  15. 【UVa 12304】2D Geometry 110 in 1! (计算几何、圆)
  16. 《操作系统真象还原》第十四章 ---- 实现文件系统 任务繁多 饭得一口口吃路得一步步走啊(总结篇)
  17. 碎片化时间学习,这几个在线视频学习网站值得拥有!
  18. Efficientnet笔记:各个框架最适合的图像尺寸
  19. 计算机无法读取移动光驱,电脑检测不到光驱怎么办?
  20. 2021.09.27-10.3 AI行业周刊(第65期):坚持的力量

热门文章

  1. Sentinel(一)Linux搭建Sentinel 控制台环境搭建及使用介绍
  2. 为什么我们要学习编程?
  3. Stable Diffusion8
  4. NUIST LevOJ P1826 荷取的基站布局 (状态压缩dp
  5. 强迫症的功能连接体:ENIGMA-OCD联盟的静息态巨型分析和机器学习分类
  6. 紫龙劝星矢考研的一封信
  7. 平衡二叉树(树的旋转)
  8. QT报错:-1: error: [Makefile.Debug:74: debug/xxxx_resource_res.o] Error 1问题解决
  9. 程序员的成长故事之 我的Borland五年
  10. c语言课程设计作业五子棋,C语言课程设计之五子棋小游戏.doc