当前位置: 代码迷 >> C语言 >> 一个怪问题
  详细解决方案

一个怪问题

热度:113   发布时间:2006-02-02 01:06:00.0
一个怪问题

有一个简单程序:

int a=2;
int f(int n)
{static a=3;
a=a+n;
return a;
}
main()
{int y=1;
printf("%d%d%d",f(y),f(y),f(y));
}

应该输出456,可不知道为什么却是654,哪位能指教



----------------解决方案--------------------------------------------------------

编译器问题


----------------解决方案--------------------------------------------------------
printf("%d%d%d",f(y),f(y),f(y));运算顺序是从右至左。
----------------解决方案--------------------------------------------------------
#include<stdio.h>
int f(int n)
{static a=3;
a=a+n;
return a;
}
int g(int b)
{
static r=2;
r=r+b;
return r;
}
int l(int p)
{
static q=9;
q=q+p;
return q;
}
main()
{int y=1;
printf("%d,%d,%d",f(y),g(y),l(y));
}
如果是从右到左为什么这个输出的却是从左到右的呢??请3楼的解释一下!!
楼主的我执行也是从右到左啊,不知道为什么!1
----------------解决方案--------------------------------------------------------
以下是引用welldone2006在2006-2-2 10:18:00的发言:
printf("%d%d%d",f(y),f(y),f(y));运算顺序是从右至左。

----------------解决方案--------------------------------------------------------
对3楼的朋友表示感谢,不过为什么会从右至左啊,对4楼的朋友的问题我倒可以回答,因为你的输出的名字不同
----------------解决方案--------------------------------------------------------

你去试完所有c编译器就明白了,关于printf()这个运算方向有从右至左也有从左至右的
别去纠缠这类问题,避免这样写代码,对学习有好处


----------------解决方案--------------------------------------------------------
同意楼上,在一些别人看起来费劲,编译器处理还不同的写法还是少写为妙,我觉得真正的有用的代码不是以一些难懂的表达式组成的.
在一些运算符上也要加上()为妙,这样就算写起来,哪个运算符级数也懒的去记了.
----------------解决方案--------------------------------------------------------
我也是这呢认为的,不要老是刻意的去研究一些有歧义或者是比较钻牛角尖 的问题.这对学习并没有什么好处!!!
----------------解决方案--------------------------------------------------------
  相关解决方案