C++指针中的这两种类型的值分配有什么区别?
What is the difference between these two types of value assign in 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
并使用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
是一个整数,它不是指针,所以你不能把它分配给一个(类型不匹配(。
相关文章:
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- unique_ptr:在分配之前调用 reset 有什么效果
- 将指针分配给另一个指针时会发生什么情况?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 为对象分配整数.输出将是什么?
- 重新分配向量时,向量中的内存会发生什么情况
- C++程序什么都不做,但瓦尔格林德显示内存分配
- C++指针中的这两种类型的值分配有什么区别?
- 删除类成员的动态分配内存的最佳方法是什么
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 虚函数如何工作,分配后新的返回类型会发生什么?
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- 如果链表被重新分配,会发生什么
- 堆指针不会被分配给数组有什么原因吗
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 右值需要分配什么向后兼容性
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- 这个演员分配什么?C风格铸造
- 视觉 建议在C++中执行字符串分配什么?