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

时间:2010-07-31 06:51:09

标签: c

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

#include <stdio.h>

/* 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?? */
}

3 个答案:

答案 0 :(得分:19)

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

如,

void try(int *x)
{
    *x = 11;
}

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

答案 1 :(得分:4)

其他答案都是正确的。在另一个函数中真正更改变量的唯一方法是通过指针传递它。 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;
}

答案 2 :(得分:1)

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

void Try( int *x );

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

void Try( int *x )
{
    *x = 11;
}