读书人

帮忙看个程序到底是什么意思?该怎么解

发布时间: 2012-03-30 17:32:09 作者: rapoo

帮忙看个程序到底是什么意思?
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int )a+1);
printf("%x,%x",ptr1[-1],*ptr2);
return 0;
}

运行结果为5,2000000

[解决办法]
int a[5]={1,2,3,4,5};
int *ptr1=(int *)(&a+1); //&a
int *ptr2=(int *)((int )a+1);
printf("%x,%x",ptr1[-1],*ptr2);
return 0;

这个意思,对于&a, 就是相当于"数组指针", 这个指针指向的类型是int[5],
&a+1, 就相当于, 指针+整数, 指针移动的字节=整数*sizeof(指向类型), 这里&a指向的类型是int[5], +1后指针向后移动了int[5]的长度, 就是20字节, 实际指向了元素"5"的后面, 然后把(&a+1)强转为int*, 那么这个int*类型的指针再加1减1, 就等于移动了一个int的字节, 莎哟~ptr1[-1] ,打印5

读书人网 >C语言

热点推荐