C语言中指针*p++应该等于*(p++),但下面的结果是11,11;为什么不是10,21

来源:百度知道 编辑:UC知道 时间:2024/07/04 23:05:58
#include<stdio.h>
void main()
{
int x[5]={10,20,30,40,50};
int *p=x;
printf("%d\n%d",*(p++) ,++(*p));
}

printf函数的执行是从右向左的,
所以printf("%d\n%d",*(p++) ,++(*p));的处理顺序是,先处理++(*p),再处理*(p++)

先处理++(*p)时,也就是++x[0],得到11,同时将x[0]值置为11
再处理*(p++),这里是先将p带入代理,再进行++处理,所以p仍然指向x[0],
由于在上一步x[0]值被置为11,所以这里得到的也为11

最后输出
11
11

函数调用的时候,实参压栈的顺序是从右到左,所以先执行的是++(*p),然后把这个值11压栈,接下来执行*(p++),然后把值11压栈,明白了吗?

第一个是*(P++)括号里面的P是先使用后加一,所以(*P++)在使用时直不变,依然指向X的第一个数,即10,然后P用完之后再加一,所以输出是又加了一,即11。后面的答案是因为++(*p), ++是先加一后使用,而(*P)每变 ,依然是指向数组 X的第一个数,即10,然后再++,既加一,就是11了。语言表达能里有限,也不知道你看没看懂,要是没看懂就说给你听吧!
QQ386370839

是 11 , 20