如何使一个long类型的指针变量指向一个int类型的变量?long *a;int b;b=20;

2024-11-28 18:20:01
推荐回答(3个)
回答1:

如果是32位系统,long是32位的,和int一样,直接指向就可以了,a=(long *)&b;
如果是64位系统,long是64位的,不要去指向int型的数值,因为long会把紧挨着b存储空间后的32位和b一起认为是一个64位整型数,不会报错,但运算会出错,存在很大危险

回答2:

做类型强制转换,
下面两种方法都行:
a=&((long)b);//把int的变量强制转化成long类型
a=(long *)(&b);//把指向int类型的指针类型强制转化为指向long类型的指针类型。

回答3:

这确实是个问题,
1、如果你直接将 a=&b的话,那么由于指针a指的长度超过了b地址原来的位数,会产生不可预料的后果。
2、所以转换之前,必须先将int型变成long型。但是如果用a=&((long)b)的话,又由于((long)b)不是一个左值而失败。
3、如果使用 a= (long*)&b的话,也可能产生第一条的不确定后果
4、所以真正的做法是要新建一个long c,先c=b,然后再a = &c,这样就没有任何问题。

但是,综上所述,你这种需求往往是没有必要的,你不需要用long型指针去操作一个int型地址的变量,这只会产生问题,所以请重新审视你的这种做法的缘由并避免它。