指针--第八课

木免2019-01-10 14:07:15

    昨天为什么要歇一天呢?因为今天要讲很难的东西。歇一天给你们缓缓。



    一个由C编译的程序,占用的计算机存储器中的内存,分为5个区段。我们这次先来简单了解一下全局量

  • 栈:由编译器自动分配释放,存放局部变量

  • 全局量段:全局变量的存储区域

  • 常量段:

  • 代码段

    比如这个例子:

    每当声明一个变量,计算机都会在存储器中某个地方为它创建空间。

  • 如果在函数(例如main()函数)中声明变量(局部变量),计算机会把它保存在一个叫的存储器区段中;(y存放在栈中)

  • 如果在函数以外的地方声明变量(全局变量),计算机则会把它保存在存储器的全局量段。(x存放在全局量段




    &运算符能够帮我们找出变量的存储器起地址

    %p用来格式化地址;地址的表示是16进制的。

    计算机可以通过变量x,y的地址在存储器中找到它们,这就是为什么地址又叫指针




    想象你在为一个游戏编写程序,游戏中玩家需要控制船的航向。那么这和指针有什么关系?让我们先不考虑指针,写写看。

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

    于是可以写一个go_south_east()函数,它接收latitudelongitude这两个变量,然后对它们进行加、减操作:

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

    但是,结果却是这样的:

    这是为什么呢?这节课就到这,这个问题的答案需要你们告诉我。

Copyright © 古田计算器虚拟社区@2017