C++ 在C+中,这两种赋值类型有什么区别+;指针?

C++ 在C+中,这两种赋值类型有什么区别+;指针?,c++,pointers,C++,Pointers,这两种变量赋值方法的区别是什么 int x = 100; int *valuePtr = &x; *valuePtr = 20; 为什么我不能使用int*valuePtr=x这边 我将给出一个编译错误。但是在int*valuePtr=&x然后*valuePtr=20不会给出编译错误 有人能解释一下吗 int x = 100; 这声明了一个名为x的int变量,并将其初始化为100 int *valuePtr = &x; 这声明了一个指向-int变量的指针,名为valuePtr

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

int x = 100;
int *valuePtr = &x;
*valuePtr = 20;
为什么我不能使用
int*valuePtr=x这边

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

有人能解释一下吗

int x = 100;
这声明了一个名为
x
int
变量,并将其初始化为100

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

表达式
*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
是一个不是指针的整数,所以不能将其分配给一个(类型不匹配)。

建议阅读指针:因为某个对象的位置和内容之间存在差异。例如,你不是你的家庭住址。
*valuePtr = 20;