指针使用前应先初始化

使用未初始化的指针是非常危险的。通过一个未初始化的指针会很容易覆盖随机的内存区域。造成的损害取决于如何倒霉,所以初始化指针不仅仅是一个好主意。通过指向一个已经被定义变量的地址 很容易初始化一个指针。以下可以看到,通过使用运算符 & 及变量的名称来用变量number的地址对指针pnumber进行初始化:

int number = 0;                  // Initialized integer variable
int* pnumber = &number;          // Initialized pointer

用另一个变量的地址初始化指针时, 请记住必须在指针声明之前声明该变量。

当然,可能不希望在声明指针时初始化为特定变量的地址。 在这种情况下可以将其初始化为等效为零的指针。为此,Visual c + + 提供了已定义为 0的符号 NULL,因此可以使用下面的语句声明并初始化一个指针,而不是上一个示例中那样:

int* pnumber = NULL;             // Pointer not pointing to anything

这可以确保指针不包含一个有效的地址,并且给指针提供一个值,使可以在 if 语句中进行检查,例如:

if(pnumber == NULL)
cout << endl << “pnumber is null.”;

当然,也可以显式初始化为0,这也保证了它被分配一个值而不指向任何一个指针。没有对象可被分配到地址0,这样的效果是,0用作地址指针表明该指针没有目标。可以说它的清晰程度稍差,如果代码可能使用其他编译器,最好是将为空的指针初始化值为0。在ISO / ANSI C + +我会使用0而不是NULL来初始化一个指针变量。

这也更符合当前 ISO/ANSI c+ +的“好习惯”, 在C++中,如果一个对象有名字,那它应该有一个类型,但是,NULL并没有类型 — — 它是 0 的别名。 在以后,会发现在C + + / CLI中有点不同。

简单地以0对指针变量的进行初始化:

int* pnumber = 0;                // Pointer not pointing to anything

使用以下语句来检查一个指针变量是否包含有效的地址:


if(pnumber == 0)
cout << endl << “pnumber is null.”;

以下语句也是等效的:

if(!pnumber)
cout << endl << “pnumber is null.”;

该语句和前边的例子是一样的,当然也可以这样:

if(pnumber != 0)                    // Pointer is valid, so do something useful

值为NULL的指针指向的地址指向一个垃圾值。不应该尝试解引用一个值为NULL的指针,这将导致程序立即中止。


Pointers to char 指向字符的指针
指向字符的指针类型 char* 有有趣的属性,它可以被文字字符串初始化。例如,使用以下语句声明和初始化一个指针变量:

char* proverb = “A miss is as good as a mile.”;

这看上去和初始化一个字符数组类似,但还是有一些不同的。

这将创建一个字符串(实际上是一个类型为const char的数组),包含字符串引号之间出现的字符以及用‘/0’终止,并将这段文本的地址存储在指针 proverb中。该文本的地址是它的第一个字符的地址。如下图所示:




  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值