请高人解答 指针运行问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 04:27:20
#include<stdio.h>
main()
{
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));
}

结果是8,8

哪位高人能解释一下

基本如上面兄弟所说。只是最一句输出时补充一下,输出时是从后向前依次执行的。就是说先执行的是*(++ptr)让指针后移了一位。而不是先执行*ptr。所以两次输出时,都是8,8,如果是*(ptr++),就会输出8,7了。.。。顶上面这位兄弟。偶只是过来看看,这样是不是明白些了

这段程序,其实考察的主要不是指针,而是a++和++a的问题。
指针一开始指向的是6.运行完这一句:*(ptr++)+=123时,指针指向了7(指针所指向的内容是不会改变的)。
当运行到printf("%d,%d",*ptr,*(++ptr))这一句时,由于使用了++ptr而不是ptr++,所以这一句最先运行的是将指针向下移动。此句相当于
ptr++;printf("%d",*ptr);printf("%d",*ptr);
所以输出的值是8 8。

*(ptr++)+=123,他的执行结果是使p的指向了arr【1】,并且把123加到arr【0】上。而输出语句的顺序是从右到左,所以输出时候先执行*(++ptr)他的意思是现将ptr指向下一位,并且取他的值,结果是8,然后输出*ptr结果也同样是8