zoukankan      html  css  js  c++  java
  • 一 *(a+1)与*(&a+1)

    int a[5]={1,2,3,4,5};
    int *ptr = (int*)(&a+1);
    问: *(a+1)是多少? *(ptr-1)是多少

    答:
    对一个类型为T的指针来说,比如 T* p
    p++或者p+1 等价于 p+sizeof(T) 而不是简单的加1。
    对一个数组来说,&a与&a[0]虽然数值相同,但是意义不同:
    &a 是“数组a的首地址”,
    &a[0]是“数组a首元素的地址”。
    所以,&a+1 等价于 “数组a的首地址+sizeof(数组a)”,
    1 2 3 4 5 未知 未知
    a &a+1
    ptr是对(&a+1)进行强制类型转换了,所以
    ptr-1 等价于 “数组a的首地址+sizeof(数组a)-sizeof(int)”
    1 2 3 4 5 未知
    ptr-1 ptr
    所以*(ptr-1)=5。
    a+1-------数组首地址+sizeof(int)。
    &a+1-----数组首地址+sizeof(数组a)
    &a[0]+1---数组首地址+sizeof(int)。

    所以,*(a+1)=2,*(ptr-1)=5

  • 相关阅读:
    OpenJudge 6042 雇佣兵
    POJ 1741 树上 点的 分治
    Codevs 1695 Windows2013
    复制书稿
    乘积最大
    编辑距离问题
    石子合并
    最大正方形子矩阵
    选菜
    混合背包
  • 原文地址:https://www.cnblogs.com/wuqi1003/p/12258705.html
Copyright © 2011-2022 走看看