如何修改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?? */
}
答案 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;
}