찾다

 >  Q&A  >  본문

c++ - c语言指针运算问题

c 指针运算问题?修改
一、代码:

int a[]={1,2,3,4,5};
int *p;
p=a;
*(p++)=10;
int i;
for (i=0; i<sizeof(a)/sizeof(int); i++) {
printf("a[%d]=%d\n",i,a[i]);
}

输出:
a[0]=10
a[1]=2
a[2]=3
a[3]=4
a[4]=5
二、问题
明明指针往下移了,为什么a[0]=10,而不是a[1]=10?

迷茫迷茫2773일 전354

모든 응답(8)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 14:02:01

    p++
    ++在后
    等价于

    *(p)=10;
    p++

    不同于++p

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 14:02:01

    (p++)=10 中(p++)返回的是0的下标,所以结果就是这样的。其实你这句等价于p++,结果是一样的

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 14:02:01

    p++会返回未自增前的值,并且在表达式求值阶段结束p才会自加,这里*p++可以看作是一个子表达式。

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 14:02:01

    p++ 不熟练就少用,节省不了多少开销,简单的一个先运算后赋值和先赋值后运算的问题。

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:02:01

    #include <stdio.h>
    int main()
    {
    
        int a[]={1,2,3,4,5};
        int *p;
        p=a;
        *(p+1)=10;
        p++;
        int i;
        for (i=0; i<sizeof(a)/sizeof(int); i++) {
            printf("a[%d]=%d\n",i,a[i]);
        }
    }

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:02:01

    p++和p是一模一样的,++p才等于(p+1),但不管怎样,这两个东西存在以后后面的代码中p=p+1。(如果还不懂,自己翻书)

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 14:02:01

    有个简单的方法便于你理解:你可以依次打印p、p++((p++)取的还是p++这个标量值,或者此处你可以输出&((p++)))、p三者的值,看了结果你就明白了*(p++)内存的地址还是p,之后才变为p+1

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 14:02:01

    “前缀++”和“后缀++”的区别,c/c++中经典考题

    회신하다
    0
  • 취소회신하다