c - 如何在 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 将创建参数的副本并在函数内部对其进行操作,一旦函数结束,副本就不再存在。您要做的是在参数中使用指针并取消引用它们以对指针指向的值进行操作。
本主题可以帮助您更好地理解:按引用传递与按值传递有什么区别?
这应该有效:
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);
}
推荐阅读
- swiftui - 如何在 tvOS 上使用 SwiftUI 在多个水平列表之间导航
- sql-server - 将 SQL Server 存储过程添加到实体框架模型的推荐方法是什么
- ios - 如何在Xcode swift中为ui标签使用if语句
- react-native - 安装 Appodeal 后如何修复“程序类型已存在:com.reactlibrary.BuildConfig”
- react-native - 如何在 Ionic React 应用程序中固定 SSL 证书
- flutter - 如何仅使用 PageView 显示下一张卡片的边缘
- grails - Json 文件解析 - Groovy
- sql - SQL 查询从当前日期每周显示日期
- javascript - 因此返回一个 JSX 必然会使函数成为一个组件?
- typescript - NPM 仅安装后依赖项