A=A+1,首先要求赋值号右侧的表达式A的值,然后将它与1相加,接着求赋值号左侧的表达式A的值,最后将加法的结果写回A中,所以表达式A被求值了两次;A+=1,首先求得赋值号左侧的表达式A的值,将这个值加上1,然后写回A中,表达式A只被求值了一次。
创新互联主营斗门网站建设的网络公司,主营网站建设方案,重庆App定制开发,斗门h5重庆小程序开发公司搭建,斗门网站营销推广欢迎斗门等地区企业咨询
这是理想的情况,实际中现代编译器都非常智能,在开启编译优化时,A=A+1这样的语句将被直接优化为A+=1甚至是A++。
void add1(int x,int y,int z)
{
int a,b,c,n;
a = x*x*x;
b = y*y*y;
c = z*z*z;
n = a+b+c;
}
/*
**add1中,x,y,z,a,b,c,n全部是局部变量,
**当函数add1运行结束,那么这些作用域是这个函数的所有局部变量的空间都将释放
**总的来说,你这个函数运行后,没有任何意义。
*/
int add2(int n)
{
add1();
printf("%d",n);
}
/*
**函数调用,要实参和形参个数一致性。
**所以调用时候应该写成add1(x,y,z);
**至于其他问题,还有……
*/
int main(int m,int n,int q)
{
scanf("%d%d%d",m,n,q);
add1(m,n,q);
getch();
return 0;
}
/*
**第一次见到这样的主函数,长见识了
**不过标准,就是遵循才有意义,
**建议遵循c99的标准。
**定义变量,不要放到主函数的参数内部了。
**有些东西约定是好了。
**至于其他问题,慢慢来,你才开始编写,不急。。。。
**函数分三步:定义,声明,调用,
**好习惯,慢慢养成!!!
*/
/*
**嵌套函数调用
*/
#include stdio.h
int Add1(int x,int y,int z)
{
int a,b,c,n;
a = x*x*x;
b = y*y*y;
c = z*z*z;
n = a+b+c;
return n;
}
int Add2(int Add2_x,int Add2_y,int Add2_z)
{
return Add1(Add2_x,Add2_y,Add2_z);
}
int main(void)
{
int m, n, q;
int Add1(int ,int ,int );
int Add2(int ,int ,int );
scanf("%d%d%d",m,n,q);
printf ("%d",Add2(m,n,q));
system ("pause");
return 0;
}
double y=5.0;
int i=3,j=5,a=97,b;
float x=2.5;
y+=i-=j*=++x;这个是重最右边往左边算,=的运算方式
首先++x,得到x=3.5,j=j*x=5*3.5=17(因为j是int型,小数点后面的舍弃)
然后i=i-j=3-17=-14;
最后y=y+i=5-14=-9;
b=a+=j%i:
同理:
先a=a+j%i=97+5%3=97+2=99
然后b=a;
(int)x/(int)y+y
先(int)x/(int)y=(int)2.5/(int)5.0=2/5=0;//整数除整数结果为整数
然后0+y,由于y为float型所以结果为float型5.0
a=(a+i, a+j) : 102 //逗号运算,取最后一个式子的结果,,a=(100,102),所以a=102 (float)i/(++j) : 0.5 //(float)3/6=3.0/6=0.5,因为式子中有float所以结果为float
表达式为:!(a+b)+c-1b+c/2
此题考察了运算符的优先级,上面出现的运算符优先级从高到低为(同一行为优先级相等):
()
!
/
+
-
知道运算符优先级就好办了,代入a,b,c的值:
!(3+4)+5-14+5/2
注:(5/2=2)
=
!7+5-14+2
注:(!7=0)
=
0+5-16
=
46
=
1
注:(逻辑运算为真得1)
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款