为什么递减有效而递增无效

问题描述 投票:0回答:1
#include <stdio.h>

int power (int m, int n);

int main()
{
   int i;
   for (i = 0; i < 10; ++i)
       printf ("%d %d %d\n", k , power(2,i), power(-3,i));
   return 0;
}

int power (int base, int n)
{
    int p;
    for (p = 1; n > 0; --n)
       p = p * base;
   return p;
}
#include <stdio.h>

int power (int m, int n);

int main()
{
   int i;
   for (i = 0; i < 10; ++i)
      printf ("%d %d %d\n", k , power(2,i), power(-3,i));
   return 0;
}

int power (int base, int n)
{
    int p;
    for (p = 1; n > 0; ++n)
        p = p * base;
    return p;
}

第一个代码是K&R书的第1.8章参数 - 按值调用的完整示例。第二个代码中的唯一区别是第二个 for 循环中的 ++n。为什么第一个在终端中显示正确的结果而第二个显示错误的结果?

我希望这两个代码的工作原理相同......

c arguments pass-by-value
1个回答
0
投票

这段代码有几个问题:

  1. 代码无法使用 gcc 编译:
gcc power.c; 
power.c: In function ‘main’:
power.c:8:30: error: ‘k’ undeclared (first use in this function)
    8 |         printf("%d %d %d\n", k, power(2, i), power(-3, i));
      |                              ^
power.c:8:30: note: each undeclared identifier is reported only once for each function it appears in

问题在于 k 未定义。 您的意思可能是

i
而不是
k

  1. 下一个问题在这一行:
    for (p = 1; n > 0; n++)
    由于循环只会停止,如果
    n <= 0
    (如果 n 增加就不会发生),则会导致无限循环。 您必须使用
    n++
     而不是 
    n--

孔代号:

#include <stdio.h>

int power(int m, int n);

int main() {
    int i;
    for (i = 0; i < 10; ++i)
        printf("%d %d %d\n", i, power(2, i), power(-3, i));
    return 0;
}

int power(int base, int n) {
    int p;
    for (p = 1; n > 0; n--)
        p = p * base;
    return p;
}
© www.soinside.com 2019 - 2024. All rights reserved.