为什么在使浮点指针指向整数时不会发生隐式转换,例如将float变量赋给整数值时?
答案 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
指向的内容。但那些是不同的问题......