C语言指针小结(一)---- *p++与*++p;(*p)++ 与 ++(*p)的解释

2021-06-09 10:42:19 浏览数 (1)

1、*p 等同于 *p; p = 1;

代码语言:javascript复制
#include <stdio.h>
int main(void)
{
    int a[5] = {555, 444, 333, 222, 111};
    int *p;

    p = a;
    // p = &a[0];
    // p  = 1;
    //指针 1,表示指向下一格
    printf("*p = %d.n", *p  );

    for (int i = 0; i < 5; i  ){
        printf("*p = %d.n", *(p i));
    }
    
}

结果是:

代码语言:javascript复制
*p = 555.
*p = 444.
*p = 333.
*p = 222.
*p = 111.

解释如下:

代码语言:javascript复制
按运算符的优先级,*和  是同一优先级,从右往左结合,*p  也就相当于*(p  ),但是  本身的含义是先运算在 1,运算就是说p  作为一个整体与前面的*进行运算;增加1指的是p 1,所以实际上*p  符号整体对外表现的值是*p的值,运算完后p再加1。
代码语言:javascript复制
【注意】是运算后p再加1,而不是p所指向的变量*p再加1

2、* p 等同于 p = 1; *p;

代码语言:javascript复制
  前置,指针先 1,然后取指针的值
代码语言:javascript复制
#include <stdio.h>
int main(void)
{
    int a[5] = {555, 444, 333, 222, 111};
    int *p;

    p = a;
    // p = &a[0];
    // p  = 1;
    //指针 1,表示指向下一格
    // printf("*p   = %d.n", *p  );	// 555
    printf("*  p = %d.n", *  p);   //  444,  前置,指针先 1,然后取指针的值
    // printf("(*p)   = %d.n", (*p)  );   //  555,先计算(*p),然后对(*p)整体 1
    // printf("  (*p) = %d.n",   (*p));   //  556,先*p取值,再前置  ,该值 1后作为整个表达式的值

    for (int i = 0; i < 5; i  ){
        printf("*p = %d.n", *(p i));
    }
    
}

结果:

代码语言:javascript复制
*  p = 444.
*p = 444.
*p = 333.
*p = 222.
*p = 111.
*p = 32766.

3、(*p)

代码语言:javascript复制
先计算(*p),然后对(*p)整体 1
代码语言:javascript复制
#include <stdio.h>
int main(void)
{
    int a[5] = {555, 444, 333, 222, 111};
    int *p;

    p = a;
    // p = &a[0];
    // p  = 1;
    //指针 1,表示指向下一格
    // printf("*p   = %d.n", *p  );    // 555
    // printf("*  p = %d.n", *  p);   //  444,  前置,指针先 1,然后取指针的值
    printf("(*p)   = %d.n", (*p)  );   //  555,先计算(*p),然后对(*p)整体 1
    // printf("  (*p) = %d.n",   (*p));   // 556,先*p取值,再前置  ,该值 1后作为整个表达式的值


    for (int i = 0; i < 5; i  ){
        printf("*p = %d.n", *(p i));
    }
    
}

结果:

代码语言:javascript复制
(*p)   = 555.
*p = 556.
*p = 444.
*p = 333.
*p = 222.
*p = 111.

4、 (*p)

代码语言:javascript复制
先*p取值,再前置  ,该值 1后作为整个表达式的值
代码语言:javascript复制
#include <stdio.h>
int main(void)
{
    int a[5] = {555, 444, 333, 222, 111};
    int *p;

    p = a;
    // p = &a[0];
    // p  = 1;
    //指针 1,表示指向下一格
    // printf("*p   = %d.n", *p  );    // 555
    // printf("*  p = %d.n", *  p);   //  444,  前置,指针先 1,然后取指针的值
    // printf("(*p)   = %d.n", (*p)  );   //  555,先计算(*p),然后对(*p)整体 1
    printf("  (*p) = %d.n",   (*p));   //  556,先*p取值,再前置  ,该值 1后作为整个表达式的值


    for (int i = 0; i < 5; i  ){
        printf("*p = %d.n", *(p i));
    }
    
}

结果:

代码语言:javascript复制
  (*p) = 556.
*p = 556.
*p = 444.
*p = 333.
*p = 222.
*p = 111.

0 人点赞