执行下列语句后的结果为( )
int x = 3, y; int *px = &x; y = *px++;
关键在于熟练掌握操作符的优先级和++的使用方法
y=*px+1; //y=(*px)++
此处*为间接访问,px指向地址的内容+1后的值赋给y。
此时,x=4,y=3。
y=*px++; //y=*(px++);
这里*(取值符)和++为同一优先级,px先和++结合;但会先使用px指向地址的内容并赋给y,之后px的值+1,只是改变了px指向的地址。
此时,x=3,y=3(这里大部分机器的结果 * px=3是因为系统给xy分配了相邻的地址,px+1指向的地址变成y的地址,如果xy的地址不相邻,则 * px的值不确定)。
两种写法 * px++和 * px+1的区别是后者是px指向地址的内容+1,前者是px指向的地址+1,所有后者、即单独的 * px++;等价于px++,是一种容易误解的写法,在实际程序中不会用到 * px++;这样的语句。
y=*++px;
类似,px先和++结合;这次会先让px指向的地址+1,之后把px指向地址的内容赋给y,当然这个值是不确定的(一般系统给xy分配的地址是相邻的,所以px指向的地址一般就是y的地址,也就是说y的内容并为改变)。
此时,x=3,y= ?。