初始化指针而不给出地址

initialising a pointer without giving an address

本文关键字:地址 指针 初始化      更新时间:2023-10-16

我想知道下面的语句无效,

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的值设置为分配内存的地址。

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