为什么*struct_pointer = struct_variable与struct_pointer =&struct_variable的行为不同?

Ali*_*ice -4 c++ struct pointers

我对C++比较陌生,我正在尝试使用 - > with structs.我有这个代码,应该从结构中打印出名称和年龄.我知道 - >当变量是一个指针时使用,所以我试图用以下代码声明一个指向struct的指针:

typedef struct Person{
  string name;
  int age;
};

int main() {
  Person me;
  me.name = "name";
  me.age = 1;
  Person* me2;
  *me2 = me;
  cout << me2->name << "," << me2->age << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码导致分段错误.

但是,如果我改变了

*me2 = me
Run Code Online (Sandbox Code Playgroud)

me2 = &me
Run Code Online (Sandbox Code Playgroud)

代码工作正常(打印出名称和年龄).

我不确定为什么这两行代码不相同.我以为我被允许用*更改指针的内容,但我不确定为什么这不起作用.请问有人帮我理解吗?

Dre*_*wen 7

所不同的是,该行*me2 = me复制内容me成任何me2点.默认情况下,me2不指向任何产生未定义行为的东西(在您的情况下,它会导致段错误).

然而,该行me2 = &me复制地址me进入me2,无需访问一个空指针.事实上,这me2指向了一个有效的内存块(因为它指向me),因此是正确的行为.