黑马程序员技术交流社区

标题: 指针数组注意问题 [打印本页]

作者: mingjixiaohui    时间: 2014-6-3 21:03
标题: 指针数组注意问题
本帖最后由 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个元素,则:







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2