本帖最后由 mingjixiaohui 于 2014-6-4 13:12 编辑
main(){
int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
*p++=i;
for(i=0;i<10;i++)
printf("a[%d]=%d\n",i,*p++);
}
当执行第一个for循环后*p++已经指向了数组末尾的后面。而第二个for循环中的输出语句中的*p++显然出错。
注意问题:
1) 指针变量可以实现本身的值的改变。如p++是合法的;而a++是错误的。因为a是数组名,它是数组的首地址,是常量。
2) 要注意指针变量的当前值。
3)虽然定义数组时指定它包含10个元素,但指针变量可以指到数组以后的内存单元,系统并不认为非法。
4) *p++,由于++和*同优先级,结合方向自右而左,等价于*(p++)。
5) *(p++)与*(++p)作用不同。若p的初值为a,则*(p++)等价a[0],*(++p)等价a[1]。
6) (*p)++表示p所指向的元素值加1。
7) 如果p当前指向a数组中的第i个元素,则:
- *(p--)相当于a[i--];
- *(++p)相当于a[++i];
- *(--p)相当于a[--i]。
|
|