注册 登录
编程论坛 C++教室

求教一道基础的优先级的问题

gestopaxmc 发布于 2007-04-24 17:43, 559 次点击
结果是
1:7
2:10
3:11
4:15实在搞不懂他的顺序是怎么个加法?怎么算都不符合优先级呀
#include<iostream.h>
int add(int x,int y)
{
return(x+y);
}
void main()
{
int m,n;
m=2;n=3;
cout<<"1:"<<add(m++,m+n)<<endl;
cout<<"2:"<<add(++m,m+n)<<endl;
cout<<"3:"<<add(m+n,m++)<<endl;
cout<<"4:"<<add(m+n,++m)<<endl;
}
8 回复
#2
PcrazyC2007-04-24 18:00
主要是++运算符的作用和函数调用参数顺序
1.当++在变量后时,先用后加,当在变量前时,先加后用.

2.函数调用参数一般是从右到左进行调用,有的编译器也会从左向右调用,与编译器有关

以第一个为例 ADD(M++,M+N)

先将参数M+N传递给Y,Y=5;再将M传递给X,再进行自加,X=2,所以结果为7,此时M=3,N=3,后面的自己分析
#3
gestopaxmc2007-04-24 18:10

那第三个呢 是怎么加的 cout<<"3:"<<add(m+n,m++)<<endl;应该是M++ M为4传给Y 然后M自驾为5 m+n=8 应该输出为12呀

#4
PcrazyC2007-04-24 18:15
++是对一个表达式而言的,add(m+n,m++)是当函数调用完后再进行++的
#5
gestopaxmc2007-04-24 18:18

哦 我懂了 学了不短时间 今天才对++有了认识 以前真是一知半解呀 谢谢版主!!

#6
PcrazyC2007-04-24 22:41
M的值一直在变的
#7
yuyunliuhen2007-04-24 22:56
以下是引用gestopaxmc在2007-4-24 17:43:11的发言:
结果是
1:7
2:10
3:11
4:15实在搞不懂他的顺序是怎么个加法?怎么算都不符合优先级呀
#include<iostream.h>
int add(int x,int y)
{
return(x+y);
}
void main()
{
int m,n;
m=2;n=3;
cout<<"1:"<<add(m++,m+n)<<endl; //2+(2+3);m=3;
cout<<"2:"<<add(++m,m+n)<<endl; //4+(3+3);m=4;
cout<<"3:"<<add(m+n,m++)<<endl; //(4+3)+4;m=5;
cout<<"4:"<<add(m+n,++m)<<endl; //(6+3)+6;m=6;
}

m++是原来的值,++x是增量后的值...

1