首页 > 解决方案 > 如何在 C 中传递参数以便可以更改值?

问题描述

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。

标签: c

解决方案


默认情况下,C 将创建参数的副本并在函数内部对其进行操作,一旦函数结束,副本就不再存在。您要做的是在参数中使用指针并取消引用它们以对指针指向的值进行操作。

本主题可以帮助您更好地理解:按引用传递与按值传递有什么区别?

这应该有效:

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);
}

推荐阅读