指针——数组——地址——值

在64位系统上,不同类型的指针都是8字节大小,指针+1移动一个元素(sizeof(type))字节大小的内存位置

	int32_t* p32 = nullptr;
	int64_t* p64 = nullptr;
	cout << "64位系统上不同类型的指针占用字节大小"<< endl;
	cout << "sizeof(int32_t*) 值" << sizeof(int32_t*) << endl;
	cout	 << "sizeof(int64_t*) 值" << sizeof(int64_t*) << endl;
	cout << "64位系统上不同类型的指针+1后的值" << endl;
	cout << p32 << "    " << p32 + 1 << endl;
	cout << p64 << "    " << p64 + 1 << endl;

在这里插入图片描述

char** list
list+1 = &list[1]
*(list+1) = list[1]
list+1每次移动8个字节的内存位置
int* p1 = (int*)list[0]
int* p2 = (int*)*list
p1==p2

数组的名子就是数组的首地址,buf+1每次移动sizeof(char)大小的内存位置,char类型元素占用1字节,buf+1每次移动1个字节内存位置,解引用取出元素值,输出结果见下图。

	char buf[256] = "123456789";
	cout << *buf << *(buf + 1) << *(buf + 2) << endl;

在这里插入图片描述


利用类型转换把char类型数组转换成int32_t指针,便能很方便的将int32_t类型的值存到char类型的字符数组中,然后,再从char类型数组中读取存放的int32_t类型的值。

void int_in_charbuf(char buf[],const int32_t& ia , const int32_t& ib, const int32_t& ic)
{
	int32_t* p = (int32_t*)buf;
	*p = ia;
	*(p + 1) = ib;
	*(p + 2) = ic;
}

void int_from_charbuf(char buf[], int& oa, int& ob, int& oc)
{
	int32_t* p = (int32_t*)buf;
	oa = *p;
	ob =*(p + 1);
	oc =*(p + 2);
}


void test()
{
	char buf[256] = { 0 };
	int32_t ia = 1000, ib = 2000, ic = 3000;
	int_in_charbuf(buf, ia, ib, ic);
	int32_t oa = 0, ob = 0, oc = 0;
	int_from_charbuf(buf, oa, ob, oc);
	cout << oa << "\t" << ob << "\t" << oc << endl;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值