printf("%x,%x",ptr1[-1],*ptr2)的思考
来源:互联网 发布:淘宝如何转企业店铺 编辑:程序博客网 时间:2024/06/05 06:38
int a[5] = {1,2,3,4,5};
int *ptr1 = (int *)(&a+1);
int *ptr2 = (int *)((int)a);
int *ptr3 = (int *)((int )a +1);
int *ptr1 = (int *)(&a+1);
int *ptr2 = (int *)((int)a);
int *ptr3 = (int *)((int )a +1);
printf("ptr:%d, ptr2:%x, ptr3:%x\n", ptr1[-1], *ptr2, *ptr,);
答案:5, 1, 2 00 00 00
看似很简单的语句,却很复杂,
首先要搞清楚&a和a的区别,a是数组首元素的首地址,而&a是整个数组的首地址,a+1是偏移int个字节,而&a+1是偏移整个数组的大小也就是20字节。那么推出ptr1[-1]=5了。
a是数组的首地址,那么就指向01 00 00 00的地址,由于是小端格式,高字节存高位,那打印是先去高字节的,所以ptr2就打印出00 00 00 01,也就是1
a强制转换成int,那么它不在是指针了,而是一个整形的数,数+1再强制转换成int*,相当于移动了1字节。指向01 00 00 00 02中的01后面那个00,因为是小端模式,所以打印是高字节对应高位,因为在内存中,int a[5]是这么存储的,01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00。所以02相对01来说是高字节,所以打印是02 00 00 00。
0 0
- printf("%x,%x",ptr1[-1],*ptr2)的思考
- printf("%x,%x",ptr1[-1],*ptr2)的思考
- printf("%x,%x",ptr1[-1],*ptr2);大小端,寻址!
- printf("%x,%x",ptr1[-1],*ptr2);大小端,寻址!
- 对++x,x++的思考
- printf格式化输出%x时的分析
- printf('%08x',number)
- printf("%x.yf",n)
- printf输出 %#x
- 【3x+1猜想】思考:x一定会缩减成比它小的值
- Cocos2d-x 的水波效果的思考
- C printf()详解---printf("%08x",number)
- C printf()详解---printf("%08x",number)
- x&(x-1)的实质
- x&x-1的问题?
- x&(x-1)的含义?
- x & (x-1)的意义
- x=x+1,x+=1,x++的区别
- SharePoint2013 Study Notes— How to Create a Event Receiver and Add Feature Event Receivers
- java 内存操作流ByteArrayOutputStream
- 什么是类的加载,何时加载
- [Android]TextView实现分散对齐(两端对齐)
- Matlab拟合好坏常用指标
- printf("%x,%x",ptr1[-1],*ptr2)的思考
- 使用3.0实现微信打飞机——11.分数排行榜的实现
- 展讯8825camera驱动流程
- 二叉搜索树(二叉查找树,二叉排序树)的详细实现
- iOS Auto Layout的使用
- 第七周工作总结——接收信号同步
- jquery(七)jquery动画大体验
- BOOST之scoped_ptr源码及与auto_ptr的区别
- 设计模式之代理模式