zoukankan      html  css  js  c++  java
  • 地址,指针的加减问题

    指针与地址的加减

    摘自http://http://www.cnblogs.com/haore147/p/3647231.html

    int main()
    {
    	int a[5]={1,2,3,4,5};
    	int *ptr=(int *)(&a+1);
    	printf("%d,%d",*(a+1),*(ptr-1));
    	return 0;
    }
    

    如上,a是一个一维数组,数组中有5个元素,所以a的类型是数组指针;ptr是一个int 型的指针,ptr的类型是整型指针

    1. &a + 1:取数组a 的首地址,该地址的值加上sizeof(a) 的值,即&a + 5*sizeof(int),也就是下一个数组的首地址(当前指针越界);
    2. (int *)(&a+1): 则是把上一步计算出来的地址,强制转换为int * 类型,赋值给ptr;
    3. *(a+1): a,&a的值是一样的,但意思不一样,a是数组首元素的首地址,也就是a[0]的首地址,&a是数组的首地址,a+1是数组下一元素的首地址,即a[1]的首地址,&a+1是下一个数组的首地址。
    4. 所以输出2*(ptr-1): 因为ptr是指向a[5],并且ptr是int * 类型,所以*(ptr-1)是指向a[4],输出5。

    2017-2-3 20:29;44


  • 相关阅读:
    指数
    汉诺塔问题
    只用递归和当前的栈实现栈的逆序
    让你996的不是你的老板,而是其他愿意996的人
    luke towan
    2020-9-3
    2020-9-3
    springboot注解
    2020-9-2
    20200827
  • 原文地址:https://www.cnblogs.com/WangAoBo/p/6365114.html
Copyright © 2011-2022 走看看