C++指针中的这两种类型的值分配有什么区别?

What is the difference between these two types of value assign in C++ pointers?

本文关键字:分配 什么 区别 类型 指针 两种 C++      更新时间:2023-10-16

这两种变量值赋值方式有什么区别?

int x = 100;
int *valuePtr = &x;
*valuePtr = 20;

为什么我不能这样使用int *valuePtr = x;

我会给出一个编译错误。但是在int *valuePtr = &x;之后*valuePtr = 20;不会给出编译错误。

谁能解释一下?

int x = 100;

这将声明一个名为xint变量,并将其初始化为 100。

int *valuePtr = &x;

这声明了一个指向int变量的指针,称为valuePtr并使用x的地址对其进行初始化(&是地址运算符(。

*valuePtr = 20;

表达式*valuePtr取消引用指针并获取对其目标(位于其地址处的int对象(的引用。 因此,整个表达式将 20 分配给指向的int对象。

为什么我不能以这种方式使用int *valuePtr = x;

在这种情况下,这是不允许的,因为x不是int *(指向int的指针(,而是int。 这与你不能说std::string foo = 10;的原因相同 - 类型不兼容,并且它们之间没有隐式转换。

以下是摘要:

  • x具有类型int
  • &x具有类型int *并计算为x的地址。
  • int不能隐式转换为int *,所以int *valuePtr = x;不编译。
  • valuePtr具有类型int *,因此您可以将&x存储在其中(类型匹配(。
  • *valuePtr具有引用指向int的类型int &,因此可以通过指针为其分配一个新值。

请记住,指针只是一个保存其他内容地址的变量。它基本上是一个标志,上面写着"你想要的东西在那边"。int *valuePtr = &x;更新符号,使其指向x*valuePtr = 20;遵循标志并尝试将20存储在标志指向的位置。*int valuePtr = x;语法无效,但没有任何意义。如果你的意思是int *valuePtr = x;那么它会失败,因为x是一个整数,它不是指针,所以你不能把它分配给一个(类型不匹配(。