我试图在功能中进行计算,但我不确定它为什么不起作用:
int calculate(int x){
x = x + 2;
return x;
}
int main(){
int x = 0;
int i;
for(i=0;i<10;i++){
calculate(x);
}
printf("i = %d, x = %d\n", i, x);
}
我知道每次通过函数时x都是0。但是我该如何解决呢? 据说我应该返回10,x应该返回20.
答案 0 :(得分:2)
您实际上可以传递要更改的整数的指针,而不是值本身。在这种情况下,新的(增加的)整数将存储在范围的原始级别(实际上位于完全相同的内存点),在此处定义它,在这种情况下是您的main
函数。所以你的代码应该是这样的:
void calculate(int *x)
{
*x += 2;
}
int main(void)
{
int x = 0;
for (int i=0; i<10; i++)
{
calculate(&x);
printf("i=%d, x=%d\n", i, x);
}
return 0;
}
<强> 输出: 强>
i=0, x=2
i=1, x=4
i=2, x=6
i=3, x=8
i=4, x=10
i=5, x=12
i=6, x=14
i=7, x=16
i=8, x=18
i=9, x=20
答案 1 :(得分:1)
变量可以相互影响。你不必确保你永远不会在其他任何地方使用i
,因为害怕在for循环中弄乱i
,因为新的范围会获得相同的新副本名称(比如两个不同的人有相同的名字)。
要解决此问题,您可以从计算功能中返回值。我将其命名为x2
,以便将其与原始x
明确区分开来:
int calculate(int x2){
x2 = x2 + 2;
return x2;
}
int main(){
int x = 0;
int i;
for(i=0;i<10;i++){
x = calculate(x);
}
printf("i = %d, x = %d\n", i, x);
}
答案 2 :(得分:0)
如果要更改x,则需要通过引用而不是按值传递它。
void calculate(int *x){
*x = *x + 2;
}
int main(){
int x = 0;
int i;
for(i=0;i<10;i++){
calculate(&x);
}
printf("i = %d, x = %d\n", i, x);
}
答案 3 :(得分:0)
您按值传递x
,因此calculate
仅更改本地副本。当calculate
返回时,结果将丢失。您需要从calculate
返回修改后的值,并将其分配给main
。
答案 4 :(得分:0)
您正在传递x
作为值(即复制它)。因此x
函数中的calculate
与其外的x
不同。因此,当您更改其值时,更改不会反映在x
中的main
。
以下情况更可取。请注意,您需要return
计算函数中的值,然后将其返回的值分配给某个值。
int calculate(int x){
return x + 2; /* CHANGED */
}
int main(){
int x = 0;
int i;
for(i=0;i<10;i++){
x = calculate(x); /* CHANGED */
}
printf("i = %d, x = %d\n", i, x);
}
答案 5 :(得分:0)
变化:
for(i=0;i<10;i++){
calculate(x);
}
为:
for(i=0;i<10;i++){
x = calculate(x);
}
您的函数返回一个值,因此您需要将其存储在某处。
答案 6 :(得分:0)
在这个功能中,你可以改变一件事,并且iguess它会起作用
Int calculate(int&amp; x)
并保持休息其他事情 基本上你可以使用“别名”