在c语言中,char a='A'; printf ("%d%o", a = a + 1 , a + 'a' - 'A' );输出结果是什么?第二个输出详解
发布网友
发布时间:2022-10-12 23:39
我来回答
共5个回答
热心网友
时间:2023-10-12 21:44
这个涉及到函数参数的从右到左还是从左到右的问题,其实计算的过程大家都知道
原因是,如果一个函数有多个参数,比如
int fun (int a, int b, int c);
调用时,总是从最后一个参数开始压栈。 也就是c先进栈,其次是b,最后才是a。
同理, 如果你这样写:
int main ()
{
int i = 0;
printf ("%d,%d,%d",++i,++i,++i);
}
先计算最后一个参数(即最右一个++i),压入1,以此类推,再压入2,3和字符串"%d,%d,%d"的首地址。
程序的输出是 3,2,1
此例同理
热心网友
时间:2023-10-12 21:44
首先,应该说明的是在不同的编译环境中结果是不一样的。
在VC++6.0中的规则: printf函数的执行顺序是由右到左的
举个例子1:
int a=65,b=20;
printf("%d,%d\n",b=a+1,a=a+1);
输出结果是:67,66
而不是:66,66
例子2:
int a=65,b=20;
printf ("%d,%d",b=a+1,b+1,a=a+1);
输出结果是:67,21
第一个%d与b=a+1替换 第二个%d与剩下的替换 顺序右到左
先算a=a+1=66 替换 第二个 %d
再算b+1 =21 替换 第二个 %d
再算b=a+1=67 替换 第一个 %d
例子3:
int a=65,b=20;
printf ("%d,%d",(b=a+1,b+1),b-5,a=a+1);
输出结果是:67,61
第一个%d与 括号里的 替换, 第二个%d与剩下的替换
括号优先级最高,先算括号里的,括号里内容相当于逗号表达式,顺序从左到右。
余下的顺序从右到左
先算b=a+1=66 替换 第一个 %d
再算b+1 =67 替换 第一个 %d
再算a=a+1=66 替换 第二个 %d
再算b-5 =61 替换 第二个 %d
这题的答案是20,142 过程与 例子3 相似
够详细了吧!
热心网友
时间:2023-10-12 21:45
输出的结果是66 141
a = a+1//a = 65 +1
a + 'a' - 'A' 可以换成a- 'A ‘+ 'a' = ’A'-'A'+'a'
最后输出的是a的值97换成8进制是141
热心网友
时间:2023-10-12 21:45
输出结果是66142,第二个是142
你算的142是对的,答案141错了。a=a+1,a='B',答案还是按'A'计算了。
热心网友
时间:2023-10-12 21:46
1 输出结果是:
66142
2 分析:
a=a+1
=65+1
=66
a+'a'-'A'
=66+97-65
=98
=(142)8 --->表示142是八进制