转载自: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

指针使用前应先初始化相关推荐

  1. c语言中,关于指针变量前的*有两种表现形式:

     c语言中,关于指针变量前的*有两种表现形式: 变量定义时 如:char *pc;   int *pi; 这里的*是跟随变量类型(char, int...)的,表示指针变量类型,是个标识符 变量引 ...

  2. 【C 语言】字符串拷贝 ( 指针使用前判空 | while 空语句 )

    文章目录 一.指针使用前判空 二.while 空语句 三.代码示例 一.指针使用前判空 在任何指针使用之前 , 要先进行判空 ; 尤其是 函数 形参 指针 , 使用前先 判断该 指针变量 是一个合法的 ...

  3. C++中变量使用前一定要初始化

    在C++中变量声明后,在使用前一定要初始化. 1>如下代码: #include<iostream> using namespace std; int main(){for(int i ...

  4. 女孩做妻子前应知道的10件事

    女孩做妻子前应知道的10件事 一段时间的甜蜜恋爱期过后,你和心爱的他终于要踏上期盼已久的红地毯.你发誓一定要做个最幸福的小女人,要成一个永远让丈夫着迷的好妻子.从一个女孩的身份转变为一个妻子的身份前, ...

  5. 学习C语言前应储备的知识

    学习C语言前应储备的知识 此文介绍的是我个人的一些心得体会,觉得在学习C语言之前了解这些知识,对学习编程会挺有帮助的. 你知道计算机中是怎么存储数据的吗? 我在学习C语言之前,听说的都是计算机中的数据 ...

  6. 【电气专业知识问答】问:新安装或检修后的电动机启动前应开展哪些检查及试转工作?

    [电气专业知识问答] 问:新安装或检修后的电动机启动前应开展哪些检查及试转工作? 答:(1)启动前检查项目.有关工作票已终结,有关接地线已拆除:电动机上或其附近应无杂物和无人工作:电动机所带动的机械应 ...

  7. c语言指针占两个字符,怎么 判断一个字符串指针的前二个字符是f:quot

    如何 判断一个字符串指针的前二个字符是"f:" 如何 判断一个字符串指针的前二个字符是"f:" ------解决方案-------------------- c ...

  8. Springboot项目启动前执行数据库初始化脚本

    背景:项目里面遇到了要在springboot项目启动前做数据库初始化的需求.总结一下几种方案: 1.使用flywaydb,启动工程的时候同时初始化脚本.集成倒是不难,主要是要解决bean的顺序加载问题 ...

  9. 女子防身自卫前应提前做的准备

    本文为大家提供的女子防身术的内容是教大家在防身自卫前应提前做好的一些准备,具备一定的防身自卫意识.女孩子一定要有提前防备的意识,始终要明白一点,你的战斗力极其有限,想和男性歹徒正面比拼力量完全没有胜算 ...

最新文章

  1. 一周焦点 | 陆奇“入驻” YC;TensorFlow 2.0 即将发布
  2. 0046算法笔记——【随机化算法】舍伍德随机化思想解决跳跃表问题
  3. ROS系统实现 tf坐标系广播与监听
  4. HTML与JS交换值
  5. 使用 IIS 在 Windows 上托管 ASP.NET Core2.0
  6. 自我审视记录本_春天重新审视战略模式
  7. 11_python基础—函数(引用、全局、局部变量)
  8. 微软 Edge 浏览器加入对 ARM64 的原生支持
  9. ios7学习之路七(隐藏虚拟键盘,解决键盘挡住UITextField问题)
  10. 虚拟机安装Oracle服务器和本地Oracle安装教程
  11. 解决从PDF复制文字后乱码问题
  12. MATLAB中pdetool工具求解泊松方程和Laplace方程
  13. ActiveX控件原理及手动修改
  14. RS-485上下拉电阻选择
  15. 计算机网络需要解决什么问题,计算机网络故障的解决措施
  16. linux下搜索丢失分区,找回丢失的Linux分区拯救我的硬盘
  17. 概率论基础(3)一维随机变量(离散型和连续型)
  18. git push 提交失败
  19. epoll使用详解:epoll_create、epoll_ctl、epoll_wait、close
  20. pandas美国人口分析实例

热门文章

  1. matlab Cartesian,Matlab - Standard Deviation of Cartesian Points
  2. 用计算机术语写诗,用电脑软件写诗——电子诗人
  3. 月租最便宜的手机卡_有什么价格便宜,月租少,流量多,并且可以从旧套餐转入的手机卡推荐?...
  4. ECM之ucf session wait timeout【DFC_ACS_LOG_NO_NL】问题分析
  5. 表单的提交方式POST和GET
  6. 鸿蒙电视是无线么,鸿蒙系统首秀,在自家设备上和普通电视大不相同赵崇带你走世界...
  7. java 祖父类_JAVA的XX.put中的put方法,是在哪个父类或祖父类中,详述父类链。
  8. 个元素前面 个元素放在第i 链表将第j_彻底理解链表中为何使用二级指针或者一级指针的引用...
  9. Abbott's Revenge UVA - 816 (输出bfs路径)
  10. IDEA的Debug 控制台输出窗口没有显示