int a[]={5,8,7,6,2,7,3};
int y,*p=&a[1];
y=(*--p)++;
printf("%d ",y); //y要在输出前自加吗?a[0]的数值为什么会发生变化呢?求解答🙏
printf("%d ",a[0]);
return 0;
y=(*--p)++;
相当于
p = p - 1;
(*p)++;
也就是
a[0]++;
y = a[0]++;,a[0]是5,所以y此时为5,然后因为++,a[0]为6
语言的运算符包括单目运算符、双目运算符、三目运算符,优先级如下:
第1优先级:各种括号,如()、[]等、成员运算符 . ;
第2优先级:所有单目运算符,如++、–、!、~等;
第3优先级:乘法运算符*、除法运算符/、求余运算符%;
第4优先级:加法运算符+、减法运算符-;
第5优先级:移位运算符<<、>>;
第6优先级:大于运算符>、大于等于运算符>=、小于运算符<、小于等于运算符<=;
第7优先级:等于运算符==、不等于运算符!=;
第8优先级:按位与运算符&;
第9优先级:按位异或运算符^;
第10优先级:按位或运算符|;
第11优先级:逻辑与运算符&&;
第12优先级:逻辑或运算符||;
第13优先级:三目条件运算符 ?: ;
第14优先级:各种赋值运算符,如=、+=、-=、*=、/= 等;
第15优先级:逗号运算, 。
在C语言中,(*--p)++
这个表达式的含义是:
--p
:将指针p向前移动一个元素。在你的代码中,p初始时指向a[1],执行--p
后,p指向a[0]。
*p
:获取指针p当前指向的元素的值。在这个例子中,这将得到a[0]的值,即5。
(*p)++
:将指针p当前指向的元素的值自增1。在这个例子中,这将使a[0]的值变为6。
然而,这个自增操作是在赋值给y之后发生的,因为++
是后置的。所以,y的值是自增前的值,即5。
所以,printf("%d ",y);
将输出5,printf("%d ",a[0]);
将输出6。
这就是为什么y在输出前不会自加,而a[0]的数值会发生变化的原因。