A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mingjixiaohui 中级黑马   /  2014-6-3 21:03  /  1526 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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]。


1 个回复

正序浏览
支持一个~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马