永发信息网

为什么未初始化的指针会指向一个不确定地址

答案:1  悬赏:40  手机版
解决时间 2021-02-06 17:11
  • 提问者网友:几叶到寒
  • 2021-02-06 12:40
为什么未初始化的指针会指向一个不确定地址
最佳答案
  • 五星知识达人网友:蓝房子
  • 2021-02-06 12:53
一、指针变量的初始化问题

  指针变量同普通变量一样,使用之前不仅要定义说明,而且必须进行初始化,指针的 初始值必须是一个地址,决不允许赋予任何其他数据, 通常是一个数据的地址或地址 变量或空指针。
  1、指针变量未被初始化
  指针变量未被初始化,指针变量就不会被分配存储空间。在程序中如果使用了未被分配 空间的指针,就会出现难以查找的错误。
如在程序
main()
{int x, p;
x= 100;
*p= x;
printf(“*p=%d\n”,p);
}
中,指针变量p因没有初始化,在执行语句*p= x;之前p的内容是未知的,当程序将100赋给 一个没有确定指向内存的指针变量p,而使得数据100被存入一个未知的单元。这个程序虽然 很小,所占的内存小,问题不明显,但实质上它却隐含着一个致命的错误。这是因为随着程 序的增大,很有可能访问到致命的地址单元,将会导致计算机系统工作区域内有用数据的破 坏,引起数据段操作系统的损毁,造成机器运行失常,甚至 “死机”。
  解决方法是指针必须初始化后,才能使用。
  本例中 p=&x; 程序便可正常运行。

  2、指针初始值可赋值为空值 
  指针变量值为0的指针称为零指针(空指针)。其表示形式为int *p=0;表示p指向地 址为0的单元,系统保证该单元不作其他应用,表示指针变量值没有意义。可以写成:
#define NULL (void *)0
int *p=NULL;
定义零指针主要用于避免指针变量的非法引用和在程序中比较指针变量是否为空两个方 面。因此,不能把一个空指针用于除此之外的其他比较。若某些系统允许第0号内存既可以 被写入也可以被读出,这时错用空指针可能会改写操作系统的一部分内容,从而使系统彻底 崩溃;若系统只允许读0号内存,这时空指针指向一个有用的字符串;若系统对0号单元实行 写保护,则对空指针的操作将失败。.因此,使用空指针时要特别小心。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯