在C语言中,所有函数参数均按值传递,因此修改在被调用方函数中传递的内容不会影响调用方函数的局部变量。
#include <stdio.h> void modify(int v) { printf("modify 1: %d\n", v); /* 0 is printed */ v = 42; printf("modify 2: %d\n", v); /* 42 is printed */ } int main(void) { int v = 0; printf("main 1: %d\n", v); /* 0 is printed */ modify(v); printf("main 2: %d\n", v); /* 0 is printed, not 42 */ return 0; }
您可以使用指针让被调用方函数修改调用方函数的局部变量。请注意,这不是通过引用传递的,而是传递了指向局部变量的指针值。
#include <stdio.h> void modify(int* v) { printf("modify 1: %d\n", *v); /* 0 is printed */ *v = 42; printf("modify 2: %d\n", *v); /* 42 is printed */ } int main(void) { int v = 0; printf("main 1: %d\n", v); /* 0 is printed */ modify(&v); printf("main 2: %d\n", v); /* 42 is printed */ return 0; }
但是,将局部变量的地址返回给被调用者将导致未定义的行为。请参见取消对超出其生存期的变量的指针的引用。