和指针起航
想象你在为一个游戏编写程序,游戏中玩家需要控制船的航向……
游戏需要控制很多东西,比如得分、生命值和玩家当前的位置。你不想把游戏写成一段很长的代码,而是可以创建许多小的函数,让每个函数完成游戏的一个功能。
那么这和指针有什么关系?让我们先不考虑指针,写写看。你将和往常一样使用变量,游戏的主要部分是驾驶你的船在百慕大三角航行,我们具体看看代码需要在航行函数中完成哪些事。
船长,向东航行!
游戏用纬度(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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论