卡文特 2016-07-04 08:47 采纳率: 33.3%
浏览 1321
已采纳

C++中,p为int型指针,那么表达式*++p是什么

++p等于(p+1)嘛?

我这里一个例子
void a(int* p)
{

  printf("%d\n",*++p);

}
void main(){

  int x = 20;
    a(&x);

}

为什么得出的结果跟我算的21不一样- -#应该是我理解错意思了,求大神指教下表达式
*++p是什么意思
  • 写回答

5条回答 默认 最新

  • djq_cpp 2016-07-05 04:39
    关注

    表达式*++p,代表先++p,然后再取*p
    相当于*(++p)
    ++p之后,p就指向x后面那个没有意义的int地址,++p相当于(p=p+1)
    然后再取它的值,自然是一堆乱码
    尝试一下,
    void plus_before_get_value(int *p){
    printf("%d\n",*++p)
    }
    void get_value_before_plus(int *p){
    printf("%d\n",++(*p))
    }
    int main(){
    int *a=new int[2];
    a[0]=2;a[1]=5;
    inr *p1=a,*p2=a;
    plus_before_get_value(p1);
    get_value_before_plus(p2);
    printf("%d %d",a[0],a[1]);
    return 0;
    }
    第一个函数中,先将p自增,得到a+1(即a[1]地址),再将该地址上的元素输出
    第二个函数中,先取p指向的地址上的值(即a[0]),再将其自增(相当于++a[0])

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 matlab有关常微分方程的问题求解决,来真人,不要ai!
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法