指针的步长问题,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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值