是否可以从另一个函数中的函数访问变量的值。您可以假设第一个函数是在主函数中调用的。 这是一个例子:
int foo (int x) {
int z;
// Do things...
return 0;
}
int bar () {
// Access value of z here.
// Do more things...
return 0;
}
在
foo
之外,其局部变量不存在。这就是它作为局部变量的全部意义。
如果您需要在函数之间传递状态,您有两种基本方法:
int z = 4;
void foo(int x) {
z = z + x;
}
void bar(void) {
z = z * 2;
}
int main(void) {
foo(6);
bar();
printf("%d\n", z);
// prints 20
}
尽可能避免这种情况。它使调试变得更加困难,因为如果不考虑其他函数可能对该全局变量的状态执行的操作,就无法测试函数。
更好的方法是通过函数的参数和返回值传递信息。对于小型数据类型和简单操作,最佳实践可能是按值传递变量并从函数返回更新的值。
对于较大的数据类型,复制效率低下,或者需要更新多个参数,您可以将指针传递给另一个值,并使用它来更新它指向的值。
传递指针的示例:
void foo(int *z, int x) {
*z = *z + x;
}
void bar(int *z) {
*z = *z * 2;
}
int main(void) {
int z = 4;
foo(&z, 6);
bar(&z);
printf("%d\n", z);
// prints 20
}