#include<stdio.h>
void main()
{
float x=3.5;
long p;
p=&((int)x);
printf("%ld",p);
}
long p;
p=&((int)x);
首先你不应该把一个 地址 赋给一个 整型变量。更不应该把存储 int 的地址 赋给 long型的指针。
所以,我改动下你的代码,方便讨论。
#include<stdio.h>
void main()
{
float x=3.5;
int *p;
p=&((int)x);
printf("%ld",p);
}
int *p;
p=&((int)x);
写出这样的代码,说明你思维很活跃,不知道你这样做的理由是什么?
&不能用在 表达式,常量,寄存器变量。
(int)x会导致一个临时的存储空间去存储 强转 之后的值,这个临时的存储空间可能是 寄存器。
p=&((int)x); 当这一句执行完后,临时的存储空间就会无效了, 你不能把一个假想的地址赋给 p
另外,这个临时的值到底存储在哪里, 不是由汇编来指定的。 反汇编也只是在翻译c语言。
假如,c标准规定 这个临时的值存储在 内存中的对象, 那么这行代码就是对的。
学习c语言
与
使用c语言是两回事,还是那句话,我反对从汇编的角度理解 c 语言。