注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小可尼の博客

Linux后端的技术窝窝

 
 
 

日志

 
 

有关C语言的指针转换的问题(原创)  

2013-11-22 17:48:10|  分类: C语言 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

自己的操作系统为64位,则sizeof(void *)=8;sizeof(unsigned char *)=8;sizeof(unsigned short *)=8;

 

程序:

 

#include <stdio.h>

static inline int fp_baseIndex4(unsigned int addr ,int level)

{

        //取addr的地址出来给ba,前面强制类型转换是指以多少个位为单位来存储;

        unsigned char *ba = (unsigned char *)&addr;

        printf(" *ba=%d\n",*ba);

        printf("ba[level]=%d\n".ba[level]);

        return (ba[level]);

}

int main(int argc,char *argv[])

{

         unsigned int hxy;

         printf("sizeof(void *)=%ld\n",sizeof(void *));

         printf("sizeof(unsigned int *)=%ld\n",sizeof(unsigned int *));

         printf("sizeof(unsigned char *)=%ld\n",sizeof(unsigned char *));

          hxy=fp_baseIndex4(258,0);

          printf("hxy=%ld\n,hxy);

          return 0;

}

解释:

因为258=256+2=1,0000,0010

第一个字节值为:2

第二个字节值为:1

 

输出:

unsigned char *ba = (unsigned char *)&addr;

 (一)hxy=fp_baseIndex4(258,0);

sizeof(void *)=8;

sizeof(unsigned char *)=8;

sizeof(unsigned short *)=8;

*ba=2;

ba[level]=2;

hxy=2;

 

(二) hxy=fp_baseIndex4(258,1);

sizeof(void *)=8;

sizeof(unsigned char *)=8;

sizeof(unsigned short *)=8;

*ba=2;

ba[level]=1;

hxy=1;

 

如果改为unsigned short *ba = (unsigned short *)&addr;

(三)hxy=fp_baseIndex4(258,0);

 

sizeof(void *)=8;

sizeof(unsigned char *)=8;

sizeof(unsigned short *)=8;

*ba=258;

ba[level]=258;

hxy=258;

 

(四)hxy=fp_baseIndex4(258,1);

sizeof(void *)=8;

sizeof(unsigned char *)=8;

sizeof(unsigned short *)=8;

*ba=258;

ba[level]=0;

hxy=0;

 

小结:

强制类型转换就是以多少个直接为单位来递增;

不论什么类型的指针,在64位的PC上都是字节为8;

 

  评论这张
 
阅读(124)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018