返回介绍

和指针起航

发布于 2024-10-10 23:21:23 字数 1883 浏览 0 评论 0 收藏 0

想象你在为一个游戏编写程序,游戏中玩家需要控制船的航向……

游戏需要控制很多东西,比如得分、生命值和玩家当前的位置。你不想把游戏写成一段很长的代码,而是可以创建许多小的函数,让每个函数完成游戏的一个功能。

那么这和指针有什么关系?让我们先不考虑指针,写写看。你将和往常一样使用变量,游戏的主要部分是驾驶你的船在百慕大三角航行,我们具体看看代码需要在航行函数中完成哪些事。

船长,向东航行!

游戏用纬度(latitude)和经度(longitude)记录玩家的位置,纬度标记玩家南北方向的位置,经度标记玩家东西方向的位置。如果玩家想要向东南方向航行,他的纬度将减小,经度将增加:

于是可以写一个

go_south_east() 函数,它接收 latitude 和 longitude 这两个变量,然后对它们进行加、减操作:

程序开始时船的位置是[32, -64],如果它向东南方向航行,船的新坐标将是[31, -63],前提是代码正确工作……

脑力风暴

仔细看看这段代码,你认为它能正确工作吗?为什么?

试驾

程序应该将船从[32, -64]向东南方向移动到[31, -63],但编译并运行程序,结果却是:

船准确地停在了原来的位置。

C 语言按值传递参数

C 语言调用函数的方式是导致这段代码不能正确工作的原因。

  • 一开始,

main() 函数有一个叫 longitude 的局部变量,它的值是 32。

当计算机调用 go_south_east() 函数时,它将变量 longitude 的值复制给了参数 lon ,这只是一个赋值的过程,从变量 longitude 到变量 lon 。也就是说,当你调用函数时,作为参数传递的不是变量,而只是变量的值。

当 go_south_east() 函数修改了 lon 的值时,函数只是修改了本地的副本,也就是说程序返回 main() 函数时,变量 longitude 中保存的还是它原来的值 32。

既然 C 语言就是这样调用函数的,那么怎么才能在函数中更新变量呢?

如果用指针,事情就好办多了……

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文