(int *)(&a+1)
来源:互联网 发布:百度cdn端口 编辑:程序博客网 时间:2024/06/17 22:16
int a[5]={1,2,3,4,5};
int *p1=(int *)(&a+1);
int *p2=(int *)((int)a+1);
p1,p2分别指向了哪里?printf("%x",p1[-1])会输出什么?
解析:
int *p1=(int *)(&a+1);
其中&的类型是int (*)[5],&a+1表示向前移动一维,就是5个int,然后前置转化为int *,就是说p1指向了a[4]后面的一个位置,可以认为是a[5],所以,printf("%x",p1[-1])会打印a[4]
int *p2=(int *)((int)a+1);
(int)a+1是将数组a地址强制转化为int整型,然后加1,这里的1是指1个字节,不是1个int ,转化后将其指向一个int整型。
之后涉及到大小端,假设为小端,数组中的前两个元素1、2在内存中的布局如下
01 00 00 00 02 00 00 00
p2由于在a的基础上加了1个字节,所以其指向01后面的00,所以p2[0]代表的元素如红色所示
01 00 00 00 02 00 00 00
由于是小端,所以p2[0] = 0x02000000
- int *ptr2=(int *)((int)a+1);
- (int *)(&a+1)
- int *ptr=(int*)(&a+1);
- int *ptr=(int *)(&a+1)
- int *ptr=(int *)(&a+1)
- int *ptr=(int *)(&a+1)
- int *ptr=(int *)(&a+1)
- int *ptr=(int *)(&a+1)
- int (*a)(int) ; int (*a[10])(int); int *(*a)(int) ;
- 数组指针(int *)(&a+1)
- (int*)(&a+1)
- int a; int* a; int** a; int (*a)[10]; int (*a)(int);int *(*a)[10]区别?
- int a; int* a; int** a; int a[10]; int (*a)[10]; int (*a)(int); 区别
- int *ptrl=(int*)(&a+1); int *ptr=(int*)((int)a+1) 这两个定义有什么区别
- int *a[10],int (*a)[10],int *a[10],int (*a)(int),int (*a[10])(int)
- 关于int *a; int &a; int & *a; int * &a
- 关于int *a; int &a; int & *a; int * &a
- int *a; int &a; int & *a; int * &a 比较
- Linux命令学习手册-objcopy命令
- 手风琴特效
- 我编程,我快乐:程序员职业规划之道(一)
- 二叉树前序、中序、后序遍历相互求法
- Ubuntu 12.04安装Ubuntu Tweak 0.7.0指南(转载)
- (int *)(&a+1)
- mysql存储过程
- 最长回文串模版
- 何为面向对象的编程思想。
- 图片拖出相框,自动消失
- 我编程,我快乐:程序员职业规划之道(二)
- JAVA 6 讓 Webservice 變簡單
- A. Snow Footprints
- 黑马程序员-ADO.net-SQL语句复习大全(一)