首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能直接将int赋值给这样的int指针: int *p =6?

为什么我不能直接将int赋值给这样的int指针: int *p =6?
EN

Stack Overflow用户
提问于 2017-07-07 09:12:33
回答 13查看 7.5K关注 0票数 7

错误:从“int”到“int*”的转换无效

int *q = 8;

效果很好。

*q = 6;

为什么我不能将int直接分配给像这样的int指针:int *q = 6;并且我可以在下一行中安全地分配它?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2017-07-07 09:17:11

因为它们是完全不同的。第一个是带有初始化表达式的变量的定义,即(指针本身的初始化 ):

代码语言:javascript
复制
int *         q                      = 8;
~~~~~         ~                      ~~~
type is int*; name of variable is q; initialized with 8

第二个是赋值(指针指向的对象):

代码语言:javascript
复制
*q                              = 6;
~~                              ~~~
dereference on q via operator*; assign the resulting lvalue pointed by q to 6

而且,int *p = 6;意味着用int*类型定义一个名为p的变量,并使用6初始化它,这是因为6不能直接用于初始化指针(即错误“从'int‘到’int*‘的无效转换”)。

票数 25
EN

Stack Overflow用户

发布于 2017-07-07 09:14:15

*符号用于代码片段中的两种不同的紫色。它第一次被用作类型声明int *的一部分,声明指向int的指针。第二次用于取消指针*q的引用,调用间接操作符。

*也可用于调用乘法运算符*q = *q * *q;

若要将值赋值给指针所指向的整数,您需要取消引用它。要将除0以外的整数值赋值给指针本身(即int *q = 8;正在做的事情),需要reinterpret_cast,因此您将得到此错误。

票数 14
EN

Stack Overflow用户

发布于 2017-07-07 09:14:24

语句int *q定义一个类型为“指针到整数”的变量,因此初始化需要是指针值,而不是整数值。因此,int *q = 8int *q; *q = 8不一样(这将是未定义的行为,因为它会取消未初始化的指针),但更像int *q; q = 8,这使得误解更加透明。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44966943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档