如何从被调用的函数中更改调用函数中的变量?

应该如何修改try()函数(以及它的调用)以从下面的程序中获得11的输出?

 #include  /* declare try() here */ int main(void) { int x = 10; try(); /* Call can change */ printf("%d\n", x); return 0; } void try() /* Signature can change */ { /* how to change x here?? */ } 

要在函数内更改x的值,请让try()获取指向变量的指针并在那里进行更改。

例如,

 void try(int *x) { *x = 11; } int main() { int x = 10; try(&x); printf("%d",x); return 0; } 

其他答案都是正确的。 在另一个函数中真正更改变量的唯一方法是通过指针传递它。 Jeff M的例子是最好的,在这里。

如果它实际上不必是完全相同的变量,则可以从该函数返回值,并将其重新分配给变量ala:

 int try(int x) { x = x + 1; return x; } int main() { int x = 10; x = try(x); printf("%d",x); return 0; } 

另一种选择是使其全球化(但不要经常这样做 – 它非常混乱!):

 int x; void try() { x = 5; } int main() { x = 10; try(); printf("%d",x); return 0; } 

您需要将指针传递给内存位置(原始指针的副本)。 否则,您只是修改原始值的副本,该值在函数退出时消失。

 void Try( int *x ); int main( void ) { int x = 10; Try( &x ); /* ... */ } void Try( int *x ) { *x = 11; }