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

建议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。


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

及时将其初始化。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值