隐含的转换和指针?

时间:2017-06-03 16:25:44

标签: c++ pointers implicit-conversion

为什么在使浮点指针指向整数时不会发生隐式转换,例如将float变量赋给整数值时?

2 个答案:

答案 0 :(得分:2)

我认为很容易通过寓言来推理它。

将指针想象成一张纸条,上面写着房子的地址。数据类型是居住在该房屋中的人的姓名。

现在,投掷指针就像拿走那张纸一样,保持地址相同(大部分),但改变住在房子里的人的姓名。

仅仅因为我们将纸上的名字从Alice更改为Bob,并不意味着Alice神奇地变成了Bob。这篇论文并没有影响到这所房子。

这就是为什么使用这样的指针有未定义的行为。代码认为它解决了Bob,实际上它是Alice。

答案 1 :(得分:1)

因为指针,它需要指向某个地方。因为这就是指针。当你有

int *p;

你取消引用它,例如:

foo(*p);

您希望取消引用指针,最后得到int

现在,如果您从float开始:

float *q;

让我们说,为了争论,你可以这样做:

int *p=q;

那么你希望这个指针到底指向哪里呢?它无法指向q指向的任何位置。因为那里唯一的东西是float

所以,你必须自己手动完成:

int n= (int)*q;
int *p= &n;

当然,只要n指针被取消引用,就必须确保p仍在范围内。而且,如果*q更改为其他值,则不会影响p指向的内容。但那些是不同的问题......