gpt4 book ai didi

c - 为什么我们在程序中使用 'int'循环时两次添加 'for'标签时输出不同?

转载 作者:行者123 更新时间:2023-12-01 21:24:52 24 4
gpt4 key购买 nike

我是一名学习者,刚接触 C 语言。当我创建一个使用 for 循环给出两个数字的幂的函数时,我遇到了在循环开始之前使用 int 声明以及在循环中更改程序输出的情况。为什么会这样?

使用“int”声明一次并输出正确的代码;

# include<stdio.h>

int main()
{
int x, y;
int r = 1;
int k;
printf("Enter base number:");
scanf("%d", &x);
printf("Enter power");
scanf("%d", &y);
for (k = 1; k <= y; k++)
{
r = r * x;
}
printf("Power is %d", r);
return 0;
}

正确的输出:

Enter base number:7
Enter power3
Power is 343

错误代码 2:

# include<stdio.h>

int main()
{
int x, y;
int r = 1;
int k;
printf("Enter base number:");
scanf("%d", &x);
printf("Enter power");
scanf("%d", &y);
for (k = 1; k <= y; k++)
{
int r = r * x;
}
printf("Power is %d", r);
return 0;
}

不正确的输出:

Enter base number:7
Enter power3
Power is 1

你能告诉我为什么会这样吗

最佳答案

for (k = 1; k <= y; k++)
{
int r = r * x;
}

int rfor里面loop 声明了一个单独且唯一的变量,该变量仅在 for 的范围内可见循环。

r不涉及 rfor之外循环。

但是在循环的初始化部分内部(内部)r , 内部 r不遮挡外部 r因为内部的声明 r目前还没有实现。

因此,rr * x指外r , 而不是内部的。

如果你写过:

for (k = 1; k <= y; k++)
{
int r = 2;
r = r * x;
}

然后全部r的将引用内部 r并且会完全遮住外面的。


此后,当您使用

printf("Power is %d", r);

它打印外层的值 r变量,保持不变。

的输出证明了这一点
Power is 1

旁注:

  • 当您指示在每次迭代时声明一个新变量时,在循环体内声明变量并没有多大意义。编译器可以将其优化为仅一个定义,但最好将声明放在 for 的初始化部分内循环或在循环之前声明它们。

关于c - 为什么我们在程序中使用 'int'循环时两次添加 'for'标签时输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63217900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com