关于*p++ (*p)++ *(p++)

    char ch[3]={‘a‘,‘c‘,‘e‘};
    char *p=ch;

1、

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

执行结果

说明:首先 *(指针运算符)和++(自增运算符)都属于单目运算符 ,优先性相同,且结合性都是 自右向左。

*p++ 先执行*p,即取出p指针指向的单元的内容,而后对p进行自增运算,即p指针指向原来单元的下一个单元,即指针p指向c单元。

2、

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

执行结果:

说明:(*p)++ 大家都知道先执行括号内的 即取出p指向单元的内容, 但是与*p++不同的是 自增的不再是p,而是括号里面的整体*p ,(此时p指针也没有向后移位,而是改变了*p,即a自增1 变成了b)

3、

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

执行结果:

说明:*(p++) 先执行括号内的p++,但是如果对p++还进行操作的话 (该操作是 取内容 即* ,与第一个的区别就是 第一个是先进行了取p的内容,在对p进行自增前进行了输出的操作),是先引用p,再对p进行自增,所以第一句输出的仍然是a。

时间: 2024-08-08 01:27:15