ubuntu驱动开发吧 关注:25贴子:177
  • 0回复贴,共1

指针的步长问题,int a[5]。a+1跟&a+1跟(int)a+1的区别

取消只看楼主收藏回复

/*指针的移动有个步长,步长等于sizeof(指针指向的元素类型) *
/#include<stdio.h>
int main(void)
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr1 = (int*)(&a + 1); //&a指针指向的元素为整个数组,故加为sizeof(数组)
int *ptr2 = (int*)((int)a + 1); //a地址再加一个字节,直接地址值相加而不是指针
int *ptr3 = (int*)(a + 1); //a为数组首元素的地址,a+1为数组第二个元素的地址 /
* 数组a在内存的存放形式为 *01000000 020000000 03000000 04000000 05000000
*ptr2指向01000000的第二个字节,故*ptr2=00000002 * */
printf("%x %x %x\n", ptr1[-1], *ptr2, *ptr3);
return 0;
}


IP属地:安徽1楼2016-07-05 09:53回复