CodeSky 代码之空

随手记录自己的学习过程

C 指针*p++与*++p

2014-03-26 23:22分类: C评论: 0

关于++i与i++,我们这里纠结了不止一次,到了指针,还得接着纠结:

1#include <stdio.h>
2
3int data[2] = {100, 200};
4int moredata[2] = {300, 400};
5int main(void)
6{
7    int * p1, * p2, * p3;
8
9    p1 = p2 = data;
10    p3 = moredata;
11    printf("  *p1 = %d,  *p2 = %d,  *p3 = %d\n", *p1, *p2, *p3);
12    printf("  *p1++ = %d,  *++p2 = %d,  (*p3)++ = %d\n", *p1++, *++p2, (*p3)++);
13    printf("  *p1 = %d,  *p2 = %d,  *p3 = %d\n", *p1, *p2, *p3);
14    return 0;
15}
16

他的输出是:

  *p1 = 100,  *p2 = 100,  *p3 = 300
  *p1++ = 100,  *++p2 = 200,  (*p3)++ = 300
  *p1 = 200,  *p2 = 200,  *p3 = 301

其他的相信都很明确了,那么含糊不清的其实是*p++*++p的区别在哪里了,回忆一下i++++i的,一个是先使用,再运算,一个是先运算,再使用(见一道题搞懂i++与++i),根据优先级,*++是一样的,他们是从右向左运算,所以先考虑++的情况,所以前者*p1了一次(使用),在运算(p1++并非*p1++),而后者则不同。

当然,最好还是应该有括号,比较清晰* (start++)

评论 (0)