您必须将指针视为一种两部分的东西。第一部分是指针本身:
struct foo* pt;
指针的另一部分是它所指向的东西。上面代码的问题是您的指针没有指向任何东西。
使指针指向某物的方法是对其进行初始化。有几种方法可以做到这一点。您的指针必须始终指向指针目标类型的有效实例,然后才能取消引用它(使用 -> 或 * 运算符)。
pt = new foo(); // one way to initialize your pointer by pointing it to newly allocated dynamic memory
pt = &t; // another way, by pointing it to the address of a local variable
void bar(foo *x)
{
pt = x; // another way, by assigning it to another pointer
}
bar(new foo());
在初始化指针之前,它处于悬空状态(“悬空指针”)。你不能取消引用它,因为它没有指向任何有效的东西。通常,如果您这样做,您的程序会崩溃,但它可能有许多其他有趣的行为。
要修复你的程序,你必须pt
指出一些有效的东西。我不知道你的程序的最终目标是什么,所以你必须做出决定,但希望我已经提供了足够的线索。