错误:从“int”到“int*”的转换无效
int *q = 8;
效果很好。
*q = 6;
为什么我不能将int直接分配给像这样的int指针:int *q = 6;并且我可以在下一行中安全地分配它?
发布于 2017-07-07 09:17:11
因为它们是完全不同的。第一个是带有初始化表达式的变量的定义,即(指针本身的初始化 ):
int * q = 8;
~~~~~ ~ ~~~
type is int*; name of variable is q; initialized with 8第二个是赋值(指针指向的对象):
*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*‘的无效转换”)。
发布于 2017-07-07 09:14:15
*符号用于代码片段中的两种不同的紫色。它第一次被用作类型声明int *的一部分,声明指向int的指针。第二次用于取消指针*q的引用,调用间接操作符。
*也可用于调用乘法运算符*q = *q * *q;;
若要将值赋值给指针所指向的整数,您需要取消引用它。要将除0以外的整数值赋值给指针本身(即int *q = 8;正在做的事情),需要reinterpret_cast,因此您将得到此错误。
发布于 2017-07-07 09:14:24
语句int *q定义一个类型为“指针到整数”的变量,因此初始化需要是指针值,而不是整数值。因此,int *q = 8与int *q; *q = 8不一样(这将是未定义的行为,因为它会取消未初始化的指针),但更像int *q; q = 8,这使得误解更加透明。
https://stackoverflow.com/questions/44966943
复制相似问题