C++指针中这两种赋值方式有什么区别?

问题描述 投票:-3回答:1

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

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

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

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

谁能解释一下?

c++ pointers
1个回答
2
投票
int x = 100;

这声明了一个 int 变量,称为 x 并将其初始化为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,所以可以通过指针给它分配一个新的值。

0
投票

请记住,指针只是一个变量,保存着其他东西的地址。它基本上是一个标志,表示 "你想要的东西已经结束了"。那里". int *valuePtr = &x; 更新标志,使其指向 x. *valuePtr = 20; 以下 的标志,并试图存储 20 在标志指向的位置。*int valuePtr = x; 是无效的语法,它没有任何意义。如果你的意思是 int *valuePtr = x; 那就不行了 x 是一个整数,它不是一个指针,所以你不能把它赋值给一个指针(类型不匹配)。

© www.soinside.com 2019 - 2024. All rights reserved.