C++中指针带来的问题

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++课程

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值