指针的类型转换和绕晕人的指针

指针:内存地址以字节为单位(提供操作内存的机会),在不同操作系统下;
32位cpu寻址能力2^32,指针为4个字节;
64位cpu寻址能力2^64, 指针为8字节。
指针的类型转换

#include<iostream>

int main()
{
	unsigned		ua{ 999 };
	int				 a{ 666 };

	int* ptrA{ &a };
	unsigned* ptrUa{&ua};

	ptrA = (int*)&ua;
	*ptrA = -1;
	/*
		ptra指向ua 修改值为-1
		*ptrA 作为int类型处理&ua的值
		ua按unsigned处理
	*/
	std::cout << *ptrA<<std::endl;  // -1
	std::cout << ua <<std::endl;  // 2^32-1

	/*
		ptrA int*     ptrB longlong*
	
		按照 long long 
		-3689348813882916865 == 0x cccc cccc ffff ffff 
	*/
	long long* ptrB{(long long *)ptrA};
	std::cout << *ptrB << std::endl;
	
	/*
		0x ff ff ff ff 
		char操作一位
		0X 41
		结果 
		unsigned ua= 0X ff ff ff 41
	*/
	char* ptrC{ (char*)ptrA };
	*ptrC = 'A';
	std::cout << ua << std::endl;

}

常量指针 指针常量 指向常量的常量指针

#include<iostream>

int main()
{
	const int a{ 100 };
	const int b{ 200 };

	/*
	* 常量指针
	* 指向常量的指针 ,可修改指向的地址 不能修改地址里的内容
	*/
	const int* cptrA{&a};
	int* cptr{ (int *)&cptrA };
	*cptr = 300;
	std::cout << *cptr << std::endl << a << std::endl;  //300 100 
	/*
		const 修饰的变量无法被修改:是const修饰的变量在编译时类似于宏被替换。强制类型转换指向其地址修改内容是成功了的。但编译时进行了类似宏的替换。在生命周期里输出变量的值未更改。而取内容发生了更改。
	*/

	/*
	* 指针常量 
	* 指针是一个常量(一经初始化不可修改) 不可修改指向地址 可修改地址里的类容
	*/
	int* const ptrA{(int*) &a };

	/*
	* 指向常量的常量指针
	* 都不可修改
	*/
	const int* const ccptr{&a};
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值