初始化指针而不给出地址

initialising a pointer without giving an address

我想知道下面的说法是无效的,

int* p;
*p = 3;

但是下面这个说法是

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

为什么我不能在给*p赋值之前给它赋值,而是在赋值之后才能赋值。谢谢

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

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

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

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

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

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