c++ - 保存变量的地址
本文介绍了c++ - 保存变量的地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
#include <cstdio>
int main(int argc, char const *argv[])
{
int aa[10]={1,2,3,4};
int * a = aa;
for (int i = 0; i < 4; ++i)
{
unsigned int b = (int)&a[i];
printf("%p : %x\n",&a[i],b );
}
}
b保存的是a[i]的地址,但是正常编译会出错,
a.cpp:6:24: warning: cast from ‘int*’ to ‘int’ loses precision [-fpermissive]
unsigned int b = (int)a;
^
通过-fpermissive
参数之后,error变成warning可以正常运行,某次的结果如下:
0x7ffeac7db3d0 : ac7db3d0
0x7ffeac7db3d4 : ac7db3d4
0x7ffeac7db3d8 : ac7db3d8
0x7ffeac7db3dc : ac7db3dc
为什么输出会不一样?
另外,如何正常保存变量的地址到一个数组,以便后续对这个地址数字进行操作?(就是后面想对0x7ffeac7db3d0这样的数据进行操作,而不是看成一个地址了)
解决方案
题主64位机子吗?看编译错误,是好像是转换导致出错了。64位,指针是8byte,而int是4byte。好像是这个问题,我改成long long就编译过了。
#include <cstdio>
int main(int argc, char const *argv[])
{
int aa[10]={1,2,3,4};
int * a = aa;
for (int i = 0; i < 4; ++i)
{
unsigned long long b = (long long)&a[i];
printf("%p : %x\n",&a[i],b );
}
}
把地址存进long long的数组,当成整型,就可以处理哒。
这篇关于c++ - 保存变量的地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文