指针强制类型转换

 1 *p表示p保存的地址编号对应的空间内容,指针变量p的解引用。

 2  打印出来的p为保存num的地址10287708,打印出来的*p为保存num地址对应的空间内容100。

 3 指针变量的跨度

指针变量的取值宽度由指针类型长度决定,如char*p,p+1会跳过一个字节。int*p,则跳过四个字节。

int main()
{
	int num = 0x01020304;
	//一个字节=8bit位=8个二进制位=2个16进制位 int类型4个字节=8个16进制位
	char* p1;
	//一个字节
	short* p2;
	//两个字节
	int* p3;
	 p1 = #
	 p2 = #
	 p3 = #
	printf("%#x\n", *p1);
	// 0x04 系统随机将指针定位再首位或末尾但输出按照顺序,输出不会显示符号位(0x4)
	printf("%#x\n", *p1+1);
	//0x05 输出 *p1为p1保存的地址所对应的空间内容0x04然后加上数字1输出
	printf("%#x\n", *(p1+1));
	//0x03 p1为char类型变量,p1保存的地址指向4这个点,
	//p1+1保存的地址表示这个点移动一个字节指向3,*(p1+1)则取出3这个点的一个字节
	
	printf("%#x\n", *p2);//0x0304
	printf("%#x\n", *p2+1);//0x0305
	printf("%#x\n", *(p2+1));//0x0102

	printf("%#x\n", *p3);//0x01020304
	printf("%#x\n", *p3+1);//0x01020305
	printf("%#x\n", *(p3+1));//p3+1的地址未知,越界

	return 0;
}

4 强制类型转换

       如果指针操作的跨度和宽度啊不等时,则需要使用类型转换,优先选择最小的宽度/跨度定义指针变量。如定义char*p  p=&num,想要输出的内容包含0x03.0x02,则需要强转*(short*)(p+1)。其中,p+1表示为指向0x03的空间地址,(short*)(p+1)则为表示强制转换成short类型,最后加上*表示取出(*)  强制转换(short*)  的p+1指向的空间地址保存的内容(0x03,0x02)。

 

5指针变量初始化

 &和*同时存在可以相互抵消,*(p)等效[ p ] 。

局部指针变量可以加一个const修饰

 int**p 的p的类型为 int**,*p的表达式类型为int***。

&p 其中求的p实际为**p的地址

 

6 void注意事项

 

 

 7 学习路线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值