回 帖 发 新 帖 刷新版面

主题:编程遇到的一个小问题

下面是我写的求n!的程序,倒数第二行的b开始我写成了&b,结果不论输入n为多少,输出一律为-42,请问这是存放b的地址吗?理解深入的大虾请指点一点。ps:蓝色的部分可以直接写成s(n)吗?可以的话后面怎么改。
int s(int n)
{   int i;
    for(i=n-1;i>=1;i--)
      n=n*i;
      return n;
}
main()
{   int n,b;
    printf("\ninput a number:\n");
    scanf("%d",&n);
   [color=000080] b=s(n);[/color]
[color=800000]    printf("b=%d\n",b);[/color]
}

回复列表 (共1个回复)

沙发

1、根据printf的用法,后面的参数应该是对应格式符的变量。比如第一个%d和b对应,输出的就是变量b的数值。而&b有特殊的含义,就是变量b的地址。一般来说,如果你用十六进制输出就能看到他的真实地址。由于%d是整型数,所以输出可能是一个负数。

2、函数的返回值应该保存或输出(《易学C++》第六章),如果没有保存或输出,那么这次运算很有可能就白做了。LZ的程序就是这个情况。我们要用变量b来保存运算结果。如果不想保存,那么必须将函数的运行结果直接输出,所以可以将蓝色的部分直接去除,printf改写成printf("b=%d\n",s(n));即可。

我来回复

您尚未登录,请登录后再回复。点此登录或注册