已知指针P指向a[1],则执行*P++后,*p的值是30。
a[1]=20;a[2]=30;
然而
void main()
{
int a[5]={1,2,3,4,5};
int i;
*p=a;
for(i=0;i<5;i++)
{
printf("%d",*p++);
}
}
运行后的结果为12345,1也被运行了,这不是冲突了吗?我听视频老师说什么先取P的值进行间接运算,那么第一题又怎么解释?急求啊,各位!
我觉得这样的问题就是为难初学者,看多了就明白了
先搜一下运算符的优先级 * 小于++ ,所以p++ 指向了a[2]
自增自减 运算符 有一个规律 先执行后运算
先直线printf("%d",*p) 然后运输p++;
你可以搞一个简单的 例如 j=0;
printf("%d",j++);也就明白了先执行后运算这句话了.
这个printf可以算是一种特例吗?
追答不是特例,这是运算符++的使用规则,与指针结合使用就会稍微复杂。
int c,*ptr;
*ptr = &c;
*ptr++; //*ptr不改变,但是 ptr++了;
*ptr++= 20; //执行结果等于:*ptr = 20; ptr++;
*(ptr++)=20;// 等于上一步
*++ptr = 20; //等于: ptr++, *ptr = 20;,此时就很明显是从右到左结合