C++显示十进制内存地址(无需理解,拷贝即用)

本文介绍了一个C++函数ip2decimal,用于将内存地址从十六进制转换为十进制,便于分析变量存储。通过演示如何获取不同类型数据的地址并输出,帮助理解内存布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        我们在C++中显示变量地址均为十六进制的,不具有直观性,尤其在分析连续存储的变量内存地址时。下面分享一个可将十六进制地址转为十进制地址显示的代码,需要注意的是,需要在文件头包含sstream与string。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int ip2decimal(void* ip)
{
		stringstream str;
		string ip_str;
		str<<ip;
		str>>ip_str;
        int bit=0;
        int ans=0;
        for(int i=ip_str.size();i>=0;--i)
		{
            if(ip_str[i]>='0'&&ip_str[i]<='9')
			{
                ans+=(ip_str[i]-'0')*pow(16,bit++);
            }else if(ip_str[i]>='A'&&ip_str[i]<='F')
			{
                ans+=(ip_str[i]-'A'+10)*pow(16,bit++);
            }
        }
        return ans;
}

演示:

int main()
{
	int a=100;
	cout<<"a的十六进制地址:"<<&a<<endl;
	cout<<"a的十进制地址:"<<ip2decimal(&a)<<"\n"<<endl;
	double b=12.5;
	cout<<"b的十六进制地址:"<<&b<<endl;
	cout<<"b的十进制地址:"<<ip2decimal(&b)<<"\n"<<endl;
	string str="xiaoming";
	cout<<"str的十六进制地址:"<<&str<<endl;
	cout<<"str的十进制地址:"<<ip2decimal(&str)<<"\n"<<endl;
	int matrix[3]={1,2,3};
	cout<<"matrix[0]的十六进制地址:"<<&matrix[0]<<endl;
	cout<<"matrix[0]的十进制地址:"<<ip2decimal(&matrix[0])<<endl;
	cout<<"matrix[1]的十六进制地址:"<<&matrix[1]<<endl;
	cout<<"matrix[1]的十进制地址:"<<ip2decimal(&matrix[1])<<endl;
	cout<<"matrix[2]的十六进制地址:"<<&matrix[2]<<endl;
	cout<<"matrix[2]的十进制地址:"<<ip2decimal(&matrix[2])<<endl;
	system("pause");
	return 0;
}

结果:

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值