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;