C++中指针带来的问题
危险更易发生在那些使用指针不仔细的人身上。极其重要的一点是:在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。为数据提供空间是一个独立的步骤,忽略这一步无疑是自找麻烦,如下所示:
long *fellow;// create a pointer-to-long
*fellow =223323;//place a value in never-never land
fellow 确实是一个指针,但它指向哪里呢?上述代码没有将地址赋给fellow。那么 223323 将被放在哪里呢?我们不知道。由于felow 没有被初始化,它可能有任何值。不管值是什么,程序都将它解释为存储223323的地址。如果fellow的值碰巧为1200,计算机将把数据放在地址1200上,即使这恰巧是程序代码的地址。fellow指向的地方很可能并不是所要存储 223323的地方。这种错误可能会导致一些最隐匿、最难以跟踪的 bug。
警告:一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。这是关于使用指针的金科玉律。
可以在声明语句中初始化指针。在这种情况下,被初始化的是指针,而不是它指向的值。也就是说下面的语句将pt(而不是*pt)的值设置为&higgens:
int higgens=5;
int *pt = &higgens;
程序清单 4.16 演示了如何将指针初始化为一个地址。
// init_ptr.cpp -- initialize a pointer
#include <iostream>
int main()
{
using namespace std;
int higgens = 5;
int * pt = &higgens;
cout << "Value of higgens = " << higgens
<< "; Address of higgens = " << &higgens << endl;
cout << "Value of *pt = " << *pt
<< "; Value of pt = " << pt << endl;
// cin.get();
return 0;
}
下面是该程序的示例输出:
Value of higgens =5;Address of higgens =0012FED4
Value of *pt=5;Value ofpt = 0012FED4
从中可知,程序将pi(而不是*pi)初始化为 higgens的地址。在您的系统上,显示的地址可能不同。
对C++感兴趣的朋友点这里:C/C++课程