c语言基本运算符问题 *a++ = *b++
voidmain(){intres[2]={5,9},asd[2]={2,6};int*a,*b;a=res;b=asd;*a++=*b++;printf("%d,%d\...
void main(){
int res[2]={5,9},asd[2]={2,6};
int *a,*b;
a=res;
b=asd;
*a++=*b++;
printf("%d,%d\n",*a,*b);
}
++的优先级高于*,则 *(a++)=*(b++),预测结果为6,6 可是运行结果为9,6 为什么?
怎么理解 *a++=*b++ 展开
int res[2]={5,9},asd[2]={2,6};
int *a,*b;
a=res;
b=asd;
*a++=*b++;
printf("%d,%d\n",*a,*b);
}
++的优先级高于*,则 *(a++)=*(b++),预测结果为6,6 可是运行结果为9,6 为什么?
怎么理解 *a++=*b++ 展开
9个回答
展开全部
因为这是后置运算。如果你不弄明白前置元算与后置运算的区别,这类问题都容易出错。
前置运算:
举例:
++a=++b;
执行顺序是:
a=a+1;
b=b+1;
a=b;
后置运算:
举例:
a++=b++;
a=b;
a=a+1;
b=b+1;
再回到你上面的问题:
*a++=*b++;
执行顺序是:
*a;
*b;
*a=*b;
a++;
b++;
最后输出的就是a[1],b[1],明白了没有?
前置运算:
举例:
++a=++b;
执行顺序是:
a=a+1;
b=b+1;
a=b;
后置运算:
举例:
a++=b++;
a=b;
a=a+1;
b=b+1;
再回到你上面的问题:
*a++=*b++;
执行顺序是:
*a;
*b;
*a=*b;
a++;
b++;
最后输出的就是a[1],b[1],明白了没有?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*a++ = *b++,从中可以看出,首先把*b所指向的值赋值给*a,就是asd[2]中的2把res[2]中的5给覆盖了;其次就是*a和*b再来执行"++"这个运算符,并指向下一个数组元素并且输出9,6。
* 和++的优先级是一样高的,但是它们的运算方向是从右到左!!!
*a++就是等于*(a++) 但此时要是输出*a++,会输出的值等于*a,然后再把指针变量会指向下一个数据
楼主所预测的结果为6,6是不对的,*a++=*b++ *b只会给*a赋值一次,就是把*b所指向的值赋值给*a所指向的值;然后通过“++”指针会指向下一个数组元素,但绝不会再给*a赋值;楼主所预测的结果为6,6,实际上楼主是指针指向下一个数组元素,并且给*a 的值覆盖了;
* 和++的优先级是一样高的,但是它们的运算方向是从右到左!!!
*a++就是等于*(a++) 但此时要是输出*a++,会输出的值等于*a,然后再把指针变量会指向下一个数据
楼主所预测的结果为6,6是不对的,*a++=*b++ *b只会给*a赋值一次,就是把*b所指向的值赋值给*a所指向的值;然后通过“++”指针会指向下一个数组元素,但绝不会再给*a赋值;楼主所预测的结果为6,6,实际上楼主是指针指向下一个数组元素,并且给*a 的值覆盖了;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*a++=*b++的分解步骤
1 *a=*b; // res[2]={2,9};
2 b=b+1; //b指向6的地址
3 a=a+1; //a指向9的地址
所以 *a=9,*b=6
*号和++是单目运算符,优先级相同,但是结合方向是从右至左。就是把*号右面的看成一个整体,
也就是*(a++)=*(b++); 因为++在后,所以最后做增1,先做*(a)=*(b), 然后b++, a++;
1 *a=*b; // res[2]={2,9};
2 b=b+1; //b指向6的地址
3 a=a+1; //a指向9的地址
所以 *a=9,*b=6
*号和++是单目运算符,优先级相同,但是结合方向是从右至左。就是把*号右面的看成一个整体,
也就是*(a++)=*(b++); 因为++在后,所以最后做增1,先做*(a)=*(b), 然后b++, a++;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*a++=*b++;
的确是相当于
*(a++)=*(b++);
由于++在后
所以
又相当于
*a=*b;
a++;
b++;
所以
运行后
第一句
*a=*b;
则相当于
res[0]=asd[0]=2,那么此时res数组就成了int res[2]={2,9};
a++ ----------a指向res[1]
b++ ----------b指向asd[1]
所以
*a=res[1]=9
*b=asd[1]=6
的确是相当于
*(a++)=*(b++);
由于++在后
所以
又相当于
*a=*b;
a++;
b++;
所以
运行后
第一句
*a=*b;
则相当于
res[0]=asd[0]=2,那么此时res数组就成了int res[2]={2,9};
a++ ----------a指向res[1]
b++ ----------b指向asd[1]
所以
*a=res[1]=9
*b=asd[1]=6
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询