关于强制转化后的风险
2015-09-19 16:48
260 查看
char i = 3;
char *q = &i;
long *p = (long *)(&i);
q的值为0x0013ff63;
q的内容为3;
p的值为0x0013ff63;
p的内容为-858993661;
都是i的地址为什么结果不一样?虽然q和p都为指针,但是q为char类型,而p为long类型,强制转换时,地址被强行扩大,而这些扩展的地址里内容未知,从而为不确定的值。
char i = 3;
char *q = &i;
long p = (*(long *)(&i));
此时可以看到p的值为-858993661
而我们把i定位为int类型时:
int i = 3;
long p = (*(long *)(&i));
此时可以看到p的值为3,这是因为在win32环境下,long和int占的位数一样,都是4个字节,32位,从而强制转化时,地址不需扩展。
char *q = &i;
long *p = (long *)(&i);
q的值为0x0013ff63;
q的内容为3;
p的值为0x0013ff63;
p的内容为-858993661;
都是i的地址为什么结果不一样?虽然q和p都为指针,但是q为char类型,而p为long类型,强制转换时,地址被强行扩大,而这些扩展的地址里内容未知,从而为不确定的值。
char i = 3;
char *q = &i;
long p = (*(long *)(&i));
此时可以看到p的值为-858993661
而我们把i定位为int类型时:
int i = 3;
long p = (*(long *)(&i));
此时可以看到p的值为3,这是因为在win32环境下,long和int占的位数一样,都是4个字节,32位,从而强制转化时,地址不需扩展。
相关文章推荐
- c语言中左移问题
- 嵌入式控制(0)----linux系统网络配置
- mysql 主键和默认 设为索引的规则
- postgres学习问题之select语句
- jquery closest()方法
- java中文件的创建
- Struts2:过滤器和拦截器的区别
- VMware Workstation中安装64位linux
- thinkphp 数据库设置前缀问题 联合查询
- 常见的排序算法
- 兴趣与努力谁占了主导地位
- 使用新建项目,引用底层库,运行时提示http://www.xinxizhan.cn/none-authorization.html。无授权解决方法
- MFC之CString转换为int、long、char*
- UIAutomator源码分析之启动和运行
- 二级指针和野指针
- Windows-svchost.exe大量占用内存
- 同级、父子级div定位
- android socket通信
- 移动前端滑动插件——JRoll
- TeamForge使用笔记3-配置管理