C语言中的指针表达式

C语言中的指针表达式,c,C,以下指针表达式之间有什么区别 *ptr++ 第一个,*ptr++,递增指针并计算为指针在递增之前指向的值 第二个,++*ptr,取消对指针的引用并递增指向的值,其值为递增的值 第三个,(*ptr)+,取消对指针的引用并递增指向值,其值是递增之前的指向值 考虑例如,intarr[4]={1,2,3,4}和ptr=&arr[1] 在int val=*ptr++之后,指针ptr指向arr[2],val为2 在int val=++*ptr之后,指针ptr仍然指向arr[1],arr[1]是递增的

以下指针表达式之间有什么区别

*ptr++



第一个,
*ptr++,递增指针并计算为指针在递增之前指向的值

第二个,
++*ptr,取消对指针的引用并递增指向的值,其值为递增的值

第三个,
(*ptr)+
,取消对指针的引用并递增指向值,其值是递增之前的指向值

考虑例如,
intarr[4]={1,2,3,4}
ptr=&arr[1]

  • int val=*ptr++之后
    ,指针
    ptr
    指向
    arr[2]
    val
    为2
  • int val=++*ptr之后
    ,指针
    ptr
    仍然指向
    arr[1]
    arr[1]
    是递增的,所以现在它的值是3,
    val
  • int val=(*ptr)+之后
    ,指针仍然指向
    arr[1]
    arr[1]
    递增,因此其值现在为3,但
    val
    的旧值为
    arr[1]
    ,2

    • 第一个,
      *ptr++,递增指针并计算为指针在递增之前指向的值

      第二个,
      ++*ptr,取消对指针的引用并递增指向的值,其值为递增的值

      第三个,
      (*ptr)+
      ,取消对指针的引用并递增指向值,其值是递增之前的指向值

      考虑例如,
      intarr[4]={1,2,3,4}
      ptr=&arr[1]

      • int val=*ptr++之后
        ,指针
        ptr
        指向
        arr[2]
        val
        为2
      • int val=++*ptr之后
        ,指针
        ptr
        仍然指向
        arr[1]
        arr[1]
        是递增的,所以现在它的值是3,
        val
      • int val=(*ptr)+之后
        ,指针仍然指向
        arr[1]
        arr[1]
        递增,因此其值现在为3,但
        val
        的旧值为
        arr[1]
        ,2

      第一个指针相当于
      *(ptr++)
      ,它将返回一个带有当前值的临时指针,然后递增ptr

      第二个将递增由
      ptr
      指向的值(假设它是定义了
      ++
      的类型),并返回递增的值

      第三个将返回由
      ptr
      指向的当前值,然后递增
      ptr

      a=0,b=0,但
      ptr
      将指向无意义

      int a = 0;
      int * ptr = &a;
      int b = ++*ptr;
      
      a=1,b=1

      int a = 0;
      int * ptr = &a;
      int b = (*ptr)++;
      

      a=1,b=0

      第一个指针相当于
      *(ptr++)
      ,它将返回一个带有当前值的临时指针,然后递增ptr

      第二个将递增由
      ptr
      指向的值(假设它是定义了
      ++
      的类型),并返回递增的值

      第三个将返回由
      ptr
      指向的当前值,然后递增
      ptr

      a=0,b=0,但
      ptr
      将指向无意义

      int a = 0;
      int * ptr = &a;
      int b = ++*ptr;
      
      a=1,b=1

      int a = 0;
      int * ptr = &a;
      int b = (*ptr)++;
      

      a=1,b=0这是家庭作业问题吗?如果是,请贴上标签。不,这不是作业问题。我在一本书中读到,它们是不同的,但它没有说如何。所以我问!!书上怎么说?你读过关于运算符优先级的书吗?这不是一本理论书。这是一本MCQ书,在回答中说他们是不同的。这是一个家庭作业问题吗?如果是,请贴上标签。不,这不是作业问题。我在一本书中读到,它们是不同的,但它没有说如何。所以我问!!书上怎么说?你读过关于运算符优先级的书吗?这不是一本理论书。这是一本MCQ的书,在回答中说他们是不同的。我认为丹尼尔·费舍尔的答案比我的好。我认为丹尼尔·费舍尔的答案比我的好。
      int a = 0;
      int * ptr = &a;
      int b = (*ptr)++;