把一个长久困惑解决了,想和同是新人菜鸟的各位分享下。
程序代码:
/* 关于p++和++p的讨论 */ /* 我是个小菜鸟,有很多问题不懂,今天把一个长久的困惑解决了,和同是菜鸟的朋友分享下 */ /* 有疏漏错误请指出,谢谢,不喜勿喷。 */ #include<stdio.h> int main() { int a[]={0,1,2,3,4,5,6,7,8,9},*p=a; /* 1. 定义指针变量,把数组 a 的起始地址赋值给 p */ printf("%d\n",*p); /* 2. *p=a[0] */ printf("%d\n",*++p); /* 3. 先 p=p+1 ,p 所指的数组项右移了一位 然后 *p , 即取 a[1] */ printf("%d\n",*(++p)); /* 4. 再 p=p+1 然后 *p , 即取a[2] */ printf("%d\n",*p++); /* 5. *p++,先用 *p 然后 p=p+1 , 值得注意的是新值p这里用不到,下一条语句用到 , 即这里还是取a[2]*/ printf("%d\n",*p); /* 6. 证明了 5. 所说的, 这里取 a[3] */ printf("%d\n",*(p++)); /* 7. 这里虽然有个括号, 但是新的p还是再下一条语句说使用, 这里还是取 a[3] */ printf("%d\n",*p); /* 8. 证明 7. 所说的,这里取 a[4] */ return 0; } /* 值得注意的是 *++p ; 类似是 : *p; p=p+1; 还有在这个小程序里,指针的移动是个连续的过程,即使运算在printf里面。下次用到的p是上次改变的p */