主题:C语言高手进下~~赋值语句 我有点不懂的地方
skyruyi
[专家分:0] 发布于 2006-07-26 11:23:00
昨天 C语言我学到了 赋值语句 后来我看到 自增自减运算符 有一个例题我看不懂 我不知道他为什么算出来不是12 而是9 你帮我 看看哈 最好可以把它的运算步奏 写给我 ~~~谢谢 你了
程序一;
main()
{
int j,i=3;
j=(i++)+(i++)+(i++);
printf("%d",j);
} 结果为什么是9
程序二 ;
main()
{
intj,i=3;
j=(++i)+(++i)+(++i);
printf("%d",j);
结果是18 我怎么算 也不是18 啊 迷糊
程序三
main()
{
int a=100;
printf("a++=%d\n",a++); 这些什么意思啊
printf("++a=%d\n",++a); 我看每个程序都有
printf("a--=%d\n",a--); 这些东西 但每个
printf("--a=%d\n",--a); 意思都不一样,
输出结果 我用什么方法一看就
a++=100 知道这些是什么意思
++a=102 呢???
a--=100
--a=102
为什么会是这个结果啊 我不懂什么, 意思
以上的问题 希望 你帮我 看看
在告诉我为什么哈 谢谢你 哟 [em10][em10][em10][em10][em10]
回复列表 (共60个回复)
51 楼
panhui419 [专家分:0] 发布于 2007-05-13 11:36:00
没错
楼主的程序的结果没错
usojay123分析的第一个程序也没错
52 楼
smywlw [专家分:60] 发布于 2007-05-25 16:45:00
对程序 2 和3 我有个很好的解释 拿 程序三 做个例题
程序三
main()
{
int a=100; //先声明一个变量 a 并给它赋值100
printf("a++=%d\n",a++); //先打印a 然后再运行a++ 以后a的值就是101了
printf("++a=%d\n",++a); //先进行a++,就是拿101+1=102然后在打印 a
printf("a--=%d\n",a--); //先打印a 也就是102 然后在进行a-- 以后a就是 101了
printf("--a=%d\n",--a); //先进行--a 就是101-1 然后在打印a 也就是打印101-1=100
最后打印结果为:
a++=100
++a=102
a--=102
--a=100
Press any key to continue
++/--在前就先++/--,++/--在后就先进行当前运算(除用括号)后++/--
程序二就是
4+5+6=14
如果在程序一中该最后打印为这样的格式
printf("%d%d",j,i);
那么i 一定为6 至于j为什么是9 我就不理解了(可能是用到栈了吧)
53 楼
smywlw [专家分:60] 发布于 2007-05-25 16:46:00
对程序 2 和3 我有个很好的解释 拿 程序三 做个例题
程序三
main()
{
int a=100; //先声明一个变量 a 并给它赋值100
printf("a++=%d\n",a++); //先打印a 然后再运行a++ 以后a的值就是101了
printf("++a=%d\n",++a); //先进行a++,就是拿101+1=102然后在打印 a
printf("a--=%d\n",a--); //先打印a 也就是102 然后在进行a-- 以后a就是 101了
printf("--a=%d\n",--a); //先进行--a 就是101-1 然后在打印a 也就是打印101-1=100
最后打印结果为:
a++=100
++a=102
a--=102
--a=100
Press any key to continue
++/--在前就先++/--,++/--在后就先进行当前运算(除用括号)后++/--
程序二就是
4+5+6=14
如果在程序一中该最后打印为这样的格式
printf("%d%d",j,i);
那么i 一定为6 至于j为什么是9 我就不理解了(可能是用到栈了吧)
54 楼
smywlw [专家分:60] 发布于 2007-05-25 16:47:00
对程序 2 和3 我有个很好的解释 拿 程序三 做个例题
程序三
main()
{
int a=100; //先声明一个变量 a 并给它赋值100
printf("a++=%d\n",a++); //先打印a 然后再运行a++ 以后a的值就是101了
printf("++a=%d\n",++a); //先进行a++,就是拿101+1=102然后在打印 a
printf("a--=%d\n",a--); //先打印a 也就是102 然后在进行a-- 以后a就是 101了
printf("--a=%d\n",--a); //先进行--a 就是101-1 然后在打印a 也就是打印101-1=100
最后打印结果为:
a++=100
++a=102
a--=102
--a=100
Press any key to continue
++/--在前就先++/--,++/--在后就先进行当前运算(除用括号)后++/--
程序二就是
4+5+6=14
如果在程序一中该最后打印为这样的格式
printf("%d%d",j,i);
那么i 一定为6 至于j为什么是9 我就不理解了(可能是用到栈了吧)
55 楼
smywlw [专家分:60] 发布于 2007-05-25 16:48:00
对程序 2 和3 我有个很好的解释 拿 程序三 做个例题
程序三
main()
{
int a=100; //先声明一个变量 a 并给它赋值100
printf("a++=%d\n",a++); //先打印a 然后再运行a++ 以后a的值就是101了
printf("++a=%d\n",++a); //先进行a++,就是拿101+1=102然后在打印 a
printf("a--=%d\n",a--); //先打印a 也就是102 然后在进行a-- 以后a就是 101了
printf("--a=%d\n",--a); //先进行--a 就是101-1 然后在打印a 也就是打印101-1=100
最后打印结果为:
a++=100
++a=102
a--=102
--a=100
Press any key to continue
++/--在前就先++/--,++/--在后就先进行当前运算(除用括号)后++/--
程序二就是
4+5+6=14
如果在程序一中该最后打印为这样的格式
printf("%d%d",j,i);
那么i 一定为6 至于j为什么是9 我就不理解了(可能是用到栈了吧)
56 楼
cmdl [专家分:1910] 发布于 2007-05-26 11:04:00
友情提示
做软件时不要这样些
57 楼
bgcelite [专家分:0] 发布于 2008-08-25 23:06:00
j=(++i)+(++i)+(++i);
汇编:
5: j=(++i)+(++i)+(++i);
0040D41F mov eax,dword ptr [ebp-8]
0040D422 add eax,1
0040D425 mov dword ptr [ebp-8],eax
0040D428 mov ecx,dword ptr [ebp-8]
0040D42B add ecx,1
0040D42E mov dword ptr [ebp-8],ecx
0040D431 mov edx,dword ptr [ebp-8]
0040D434 add edx,dword ptr [ebp-8]
0040D437 mov eax,dword ptr [ebp-8]
0040D43A add eax,1
0040D43D mov dword ptr [ebp-8],eax
0040D440 add edx,dword ptr [ebp-8]
0040D443 mov dword ptr [ebp-4],edx
这下明白了吧!!
58 楼
wudiapple [专家分:0] 发布于 2008-08-30 21:04:00
trubo c 18 good
59 楼
sy890622 [专家分:130] 发布于 2008-09-02 18:32:00
哇...如果编译器编译出来不是你的答案的话 说明这个题目没有遵循ANCI-C标准...
就是执行先后的问题拉~估计你们考试会考。。
一般人不会去写这种模糊不清的代码
把3个i++分开写就好了
你要知道的就是i++和++i的区别
60 楼
chengtao786 [专家分:0] 发布于 2008-09-04 19:02:00
i++ 是先运算,运算完这一行,或到“;”。。
程序一;
main()
{
int j,i=3;
j=(i++)+(i++)+(i++);
printf("%d",j);
} 结果为什么是9
程序一改写;
main()
{
int j,i=3;
j=(i)+(i)+(i);
i++;
i++;
i++;
printf("%d",j);
} 结果是:9
程序二 ;
main()
{
intj,i=3;
j=(++i)+(++i)+(++i);
printf("%d",j);
结果是18 我怎么算 也不是18 啊 迷糊
程序二改写 ;
main()
{
intj,i=3;
i++;
i++;
i++;
//此时,i=6..
j=(i)+(i)+(i);
printf("%d",j);
结果是:18
程序三
main()
{
int a=100;
printf("a++=%d\n",a++); 这些什么意思啊
printf("++a=%d\n",++a); 我看每个程序都有
printf("a--=%d\n",a--); 这些东西 但每个
printf("--a=%d\n",--a); 意思都不一样,
输出结果 我用什么方法一看就
a++=100 知道这些是什么意思
++a=102 呢???
a--=100
--a=102
程序三改写
main()
{
int a=100;
printf("a++=%d\n",a);
a++;
a++;
printf("++a=%d\n",a);
printf("a--=%d\n",a);
a--;
a--;
printf("--a=%d\n",a);
}
输出结果:
a++=100
++a=102
a--=102
--a=100
我来回复