强制类型转换的不会改变数据正常存放的地址

#include "stdafx.h"
#include<iostream>
#include<vector>
#include<bitset>
#include<algorithm>
#include<queue>
using namespace std;


char* transformer(void* a) {
	printf("a = %p\n", a);
	char* c = reinterpret_cast<char*>(a);
	printf("c = %p\n", c);
	printf("*c = %c\n", *c);
	return c;
}
int main() {
	char* t;
	char b = 'j';
	char* ptb = &b;
	printf("ptb = %p\n", ptb);
	printf("*ptb = %c\n", *ptb);
	void* tmp = reinterpret_cast<void*>(&b);
	printf("tmp = %p\n", tmp);
	cout << "===========" << endl;
	t = transformer(tmp);
	printf("t = %p\n", t);
	printf("*t = %c\n", *t);
	return 0;

}

std::make_shared 一次性为int对象和用于引用计数的数据都分配了内存,而new操作符只是为int分配了内存。所以局部make_shared,其数据内存会被析构。

void* func(int* b) {
	printf("*b = %d\n", *b);
	std::shared_ptr<int> p = std::make_shared<int>();
	*p = *b;
	printf("*p = %d\n", *p);
	printf("p_count =%d\n", p.use_count());
	printf("p.get() =%p\n", p.get());
	printf("*p.get() =%d\n", *p.get());
	
	void* data = reinterpret_cast<void*>(p.get());
	printf("data =%p\n", data);

	return data;
}
int main()
{
	int b = 7;
	printf("&b =%p\n", &b);
	void* recv = func(&b);
	printf("recv =%p\n", recv);
	int* b2 = reinterpret_cast<int*>(recv);
	printf("b2 =%p\n", b2);
	printf("*b2 =%d\n", *b2);

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值