c语言指针的强制类型转换

一、同类型的数据和同类型指针之间的转换

 23 #include <sys/stat.h>                                                                                                                          
 22 #include <stdio.h>                                                                                                                             
 21 #include <stdlib.h>                                                                                                                            
 20 #include <string.h>                                                                                                                            
 19 #include <stdarg.h> 
 
 7 int main(int argc, char *argv[])                                                                                                               
  6 {                                                                                                                                              
  5 |   unsigned int ret = 11;                                                                                                                     
  4 |   unsigned int *ret1 = &ret; //指针ret1 指向ret所在的地址                                                                                                                 
  3                                                                                                                                                
  2 |   printf("%x\n", *ret1);                                                                                                                     
  1 |   return 0;                                                                                                                                  
34  }  

原因:

指针ret1 指向ret所在的地址 ,如果将unsigned int 类型转换成指针的表示方法,见如下方式:

 26 int main(int argc, char *argv[])                                                                                                               
 27 {                                                                                                                                              
 28 |   unsigned int ret = 11;                                                                                                                     
 29                                                                                                                                                
 30 |   printf("ret:%d\n", ret);                                                                                                                   
 31 |   printf("*(unsigned int *)ret:%d\n", *(unsigned int *)&ret);                                                                                
 32                                                                                                                                                
 33 |   return 0;                                                                                                                                  
 34 } 

结果:

ret:11
*(unsigned int *)ret:11

从结果上可以看到,两个结果相同,这也就是说unsigned int ret*(unsigned int *)&ret是等价的。

二、不同类型的数据和指针之间的转换

以下是intchar数组之间的类型转换

  8 #include <sys/stat.h>                                                                                                                          
  9 #include <stdio.h>                                                                                                                             
 10 #include <stdlib.h>                                                                                                                            
 11 #include <string.h>                                                                                                                            
 12 #include <stdarg.h>                                                                                                                            
 13                                                                                                                                                                                                                                 
 15 int main(int argc, char *argv[])                                                                                                               
 16 {                                                                                                                                              
 17 |   unsigned int ret = 0;                                                                                                                      
 18 |   unsigned char buffer[4] = {0x01, 0x02, 0x03, 0x04};                                                                                        
 19                                                                                                                                                
 20 |   ret = *(unsigned int *)buffer;                                                                                                             
 21 |   printf("%x\n", ret);                                                                                                                       
 22                                                                                                                                                
 23 |   return 0;                                                                                                                                  
 24 }   

通过将数据类型转换成指针的方式不用考虑不同数据类型之间的大小即可实现不同类型之间的转换。除了上述方式也可以通过memcpy和方式进行转换。memcpy实现方式如下:

备注:

 23 int main(int argc, char *argv[])                                                                                                               
 24 {                                                                                                                                              
 25 |   unsigned int ret = 0;                                                                                                                      
 26 |   unsigned char buffer[4] = {0x01, 0x02, 0x03, 0x04};                                                                                        
 27                                                                                                                                                
 28 |   memcpy(&ret, buffer, sizeof(unsigned int));                                                                                                
 29 |   printf("%x\n", ret);                                                                                                                       
 30                                                                                                                                                
 31 |   return 0;                                                                                                                                  
 32 }  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绛洞花主敏明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值