C:查找整数的n次方基(使用函数)

C:查找整数的n次方基(使用函数),c,C,我当时正在读丹尼斯·里奇的《C编程语言》,对下面的代码中求基数的n次方值有疑问: #include <stdio.h> /* test power function */ int power(int m, int n); main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2,i), power(-3,i)); return 0; }

我当时正在读丹尼斯·里奇的《C编程语言》,对下面的代码中求基数的n次方值有疑问:

#include <stdio.h> 

/* test power function */ 
int power(int m, int n);
main() 
{   int i; 

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

/* power: raise base to n-th power; n >= 0 */ 
int power(int base, int n) 
{ 
    int i, p; 
    p = 1; 

    for (i = 1; i <= n; ++i) 

        //Code causing confusion
        p = p * base; 
    return p; 
        //end

} 

我的疑问是p设置为1,但为什么p=p*base打印值?

我已经有一段时间没有读过那本书了,但我相信你会看到一章,在这一章中,你会讨论

在本例中,变量的范围是该变量的“生存期”

就像我能说出我的朋友乔和鲍勃的名字一样,但是直接对鲍勃说,把他称为他、他或他的,然后在这句话中继续使用他,你就会明白我说的是鲍勃。然后我可以提到乔,谈论他的行为,使用他,他或他的,你就会明白我说的是乔,而不是鲍勃

函数也是如此。把一个函数想象成一个句子。
power
函数中的
i
main
函数中的
i
不同

这是范围的基本概念

若你们还并没有读到这一章,你们应该很快就会读到,我建议你们把这一章读几遍,以充分把握范围;尤其是在C语言中,如果理解不当,它可能会导致一些有趣和令人困惑的错误


我希望这能有所帮助。

我已经有一段时间没有读过那本书了,但我相信你会看到一章,在这一章中,你谈到了生命的概念

在本例中,变量的范围是该变量的“生存期”

就像我能说出我的朋友乔和鲍勃的名字一样,但是直接对鲍勃说,把他称为他、他或他的,然后在这句话中继续使用他,你就会明白我说的是鲍勃。然后我可以提到乔,谈论他的行为,使用他,他或他的,你就会明白我说的是乔,而不是鲍勃

函数也是如此。把一个函数想象成一个句子。
power
函数中的
i
main
函数中的
i
不同

这是范围的基本概念

若你们还并没有读到这一章,你们应该很快就会读到,我建议你们把这一章读几遍,以充分把握范围;尤其是在C语言中,如果理解不当,它可能会导致一些有趣和令人困惑的错误


我希望这能有所帮助。

我忽略了一个明显的事实,p=p*base将导致p的值不断变化。而且

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

printf(“%d%d%d\n”,i,幂(2,i),幂(-3,i));
返回0;

将确保输出打印10次。

我忽略了一个明显的事实,即p=p*base将导致p的值不断变化。而且

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

printf(“%d%d%d\n”,i,幂(2,i),幂(-3,i));
返回0;

将确保输出打印10次。

因为幂函数中的
i
变量与调用函数中的
i
变量完全分离。今天的热门问题,请看您的问题不清楚。您会问为什么
p=p*base
正在“打印递增的值”,但
p=p*base
不打印任何内容,并且会进行乘法;它不会增加。现在还不清楚你们认为这是什么关系(i=1;我怀疑p是以1开始的,但它输出的值是从1到9。如何?(我现在更新了问题)因为幂函数中的
i
变量与调用函数中的
i
变量是完全独立的。现在流行的问题是,你的问题不清楚。你会问为什么
p=p*base
是“打印增量值,”但是
p=p*base
不打印任何内容,它会乘法;它不会递增。而且不清楚您认为这与
的关系是什么(i=1;我怀疑的是p是从1开始的,但它会输出从1到9的值。如何?(我现在更新了问题)我在评论我自己的答案,因为我不想增加混淆,但为了教育和完整性,在一些编译器和C版本中,在一个函数中有一个变量
I
,然后在其他地方使用相同的
I
变量是可能的(尽管如果可以的话,我们非常不鼓励这样做)。整数溢出和未定义行为的概念同样重要。
:)
@DavidC.Rankin..C的第一条规则是你不要谈论未定义的行为!C的第二条规则是你不要谈论未定义的行为!C的第三条规则是如果你的代码停止或内核转储,应用程序就完成了。#4,只需编译两个文件。#5,一次1条指令。#6没有goto,没有神奇的数字。#7循环如果这是你的第一个C程序……你必须SIGSEGV;)这些都是很好的规则。最好把脚注埋在看不见的地方。
:)范围不是生命周期。作用域是源代码中可见标识符的位置。生命周期是指在程序执行期间存在一个对象。我对自己的答案进行了评论,因为我不想增加混淆,但出于教育和完整性的考虑,在某些编译器和C版本中,在一个函数中有一个变量
I
,然后在其他地方使用相同的
I
变量是可能的(尽管如果可以的话,我们非常不鼓励这样做)。整数溢出和未定义行为的概念同样重要。:)@DavidC.Rankin。。C的第一条规则是不要谈论未定义的行为!C语言的第二条规则是不要谈论未定义的行为!C的第三条规则是如果你的co