C传递值而不是参数-这是我被告知的,但是我该如何解决?我只是不明白。
#include <stdio.h>
/* This will not work */
void go_south_east(int lat, int lon) {
lat = lat - 1;
lon = lon + 1;
}
int main() {
int latitude = 32;
int longitude = -64;
go_south_east(latitude, longitude);
printf("Now at: [%i, %i]\n", latitude, longitude);
printf("The log pointer is at %x\n", longitude);
}
它不会更新main()
中的值-它们保持在32,-64,但应为31,-63。
答案 0 :(得分:3)
默认情况下,C将创建参数的副本并在函数内部对其进行操作,一旦函数结束,副本将不复存在。 您要做的是在参数中使用指针,然后取消引用它们以对指针指向的值进行操作。
本主题可以帮助您更好地理解:What's the difference between passing by reference vs. passing by value?
这应该有效:
void go_south_east(int *lat, int *lon) {
*lat = *lat - 1;
*lon = *lon + 1;
}
int main() {
int latitude = 32;
int longitude = -64;
go_south_east(&latitude, &longitude);
printf("Now at: [%i, %i]\n", latitude, longitude);
}