博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针使用前应先初始化
阅读量:5981 次
发布时间:2019-06-20

本文共 1555 字,大约阅读时间需要 5 分钟。

转载自:http://blog.csdn.net/lihaoweiv/article/details/7027521

使用未初始化的指针是非常危险的。通过一个未初始化的指针会很容易覆盖随机的内存区域。造成的损害取决于如何倒霉,所以初始化指针不仅仅是一个好主意。通过指向一个已经被定义变量的地址 很容易初始化一个指针。以下可以看到,通过使用运算符 & 及变量的名称来用变量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中。该文本的地址是它的第一个字符的地址。如下图所示:

 

转载于:https://www.cnblogs.com/batteryhp/p/5020447.html

你可能感兴趣的文章
Struts2 自定义拦截器(方法拦截器)
查看>>
Linux服务器的那些性能参数指标
查看>>
BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
查看>>
c++ 11开始语言本身和标准库支持并发编程
查看>>
.NET Core 之 MSBuild 介绍
查看>>
iOS:即时通讯之<了解篇 SocKet>
查看>>
《JavaScript高级程序设计》读书笔记(十):本地对象Date
查看>>
linux中fork()函数详解
查看>>
从1G到5G,46年屏幕变迁下,富士康、苹果、三星、华为的浴火重生路 ...
查看>>
用flash测试你的ircd
查看>>
白话红黑树系列之二——红黑树的构建
查看>>
客户的一张表中出现重复数据,而该列由唯一键约束,重复值如何产生的呢?...
查看>>
MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能
查看>>
OnePlus安装Kali-NetHunter
查看>>
JavaScript:Array 对象
查看>>
PDFCreator:一款免费,开源的PDF(Tiff,pcx,png,jpeg,bmp,PS,EPS)打印机(VB,GPL),并提供了COM接口,方便使用各种编程语言调用...
查看>>
Note 1773479 - SYB: Displaying multiple triggers per object
查看>>
联手云计算核心技术开发,BoCloud与中科院软件所战略合作
查看>>
2017年背景下的SSD选购技巧有哪些变化?
查看>>
2016年的数据存储和管理的成本将何去何从?
查看>>