在没有给出地址的情况下初始化指针

时间:2015-11-16 03:26:57

标签: c++ pointers initialization

我想知道以下声明无效,

int* p;
*p = 3;

但是下面的陈述是

int* p; int a;
a = 9;
p = &a;
*p = 3;

为什么我不能在给它一个地址之前给它一个值,但可以在分配一个地址后给它。感谢

2 个答案:

答案 0 :(得分:2)

指针只是一种特殊类型的变量,它将内存地址作为其值。在初始化之前,它可能指向任何随机存储器地址。

取消引用指针(使用*p = 3语法)告诉计算机转到p指向的内存地址,并将值3存储在该位置

所以很明显,没有有效的内存位置,这是有问题的。这是通过分配获得有效内存地址的一种可能方式:

int *p = new int;
*p = 3;

第一行做了两件事:1)在堆上为int分配内存,2)将指针p的值设置为分配的内存的地址。

答案 1 :(得分:0)

如果没有初始化指向地址,指针将包含一些垃圾地址,这是您在第一个示例中尝试写入的地址。为了有效,指针必须引用您拥有的某个有效内存,这需要您将其设置为一个地址。