‫你好, 欢迎｡
‫在这节课中, 我们将学习引用和指针的替代方法, 我们将看到它们为什么不同,
‫为什么我们要使用它们｡
‫让我们一起来看看｡
‫因此, 除了指针, 还有一个非常相似的相关概念, 称为引用｡
‫现在指针和引用本质上都只是一个内存地址｡
‫它们都存储了一个引用, 指向可以找到另一个变量的位置, 在这一点上, 它们非常相似｡
‫两者之间的区别基本上归结为他们是否可以重新分配｡
‫基本上, 它们在第一次创建后是否可以指向不同的地址？
‫在指针的情况下, 答案是肯定的｡
‫只要类型正确, 您可以随时更改指针, 使其指向新的内存地址､
‫新的参与者或新的组件｡
‫另一方面, 一个引用只能在你第一次创建它指向另一个变量时设置一次, 然后就不能再改变了｡
‫这是一个安全特性, 因为重定向变量可能会导致变量消失或将指针设置为空的问题｡
‫空指针本质上是一个指向空的指针,
‫试图用一个设置为空的指针做一些事情实际上会导致引擎崩溃, 这对引用来说不是一个理想的结果, 因为你必须在第一次创建引用时给它们一个值｡
‫它们不能为空, 所以你不能得到这些空指针崩溃｡
‫因此, 让我们开始了解一些相关的语法｡
‫因此, 当您使用指针访问内容时, 必须使用一些特殊的语法｡
‫你必须把这个星星放在指针前面,
‫以确保你得到的是指针中的值, 而不是带引用的内存地址, 因为你从来不需要真正得到内存地址｡
‫您可以直接使用该变量, 就好像它就是它所指向的变量一样｡
‫您不必使用任何特殊语法｡
‫现在是访问地址, 所以通过指针你可以自动获得地址｡
‫当您将变数与指涉搭配使用时, 必须使用特殊语法｡
‫要做到这一点, 你必须使用运算符的地址, 它将得到基本上与原始变量相同的地址｡
‫然后用一个指针来改变地址｡
‫我们已经看到, 您可以分配地址, 并使用运算符的地址来对引用执行此操作｡
‫这是不允许的, 因此没有语法｡
‫最后, 如果我们想改变我们指向的值, 而不是地址, 而是存储在该地址的实际值,
‫该怎么办？
‫对于指针, 你必须再次使用一些特殊的语法｡
‫我们得把星星放上去, 然后分配一些东西｡
‫所以你把演员指针赋值给星星指针, 因为你不能改变实际的地址, 所以你不需要任何额外的语法｡
‫我们可以去掉多余的语法, 只使用actor引用equals｡
‫使用者表示您正在覆盖所指向位置中的值｡
‫所以这些都是理论上的｡
‫让我们来举一个实际的例子｡
‫所以如果我们有一个浮动存储, 在游戏中对我们造成的伤害, 在这个存储中, 当前的伤害被设置为零｡
‫没人伤害我们｡
‫现在我们可能想创建一个对this的引用, 而不是复制, 我们可能想把它传递给一个函数,
‫但实际上并没有改变它｡
‫我们可以这样做, 就是有一个浮点数, 然后把&号放在浮点数后面｡
‫和号表示这是对浮点数的引用｡
‫它本身不是一个新的float, 不分配任何float内存｡
‫它只分配一个指针内存｡
‫我们可以把它叫做参考损伤, 我们可以把它设为等于损伤｡
‫我们不需要地址或做任何类似的事情｡
‫它会自动知道, 这是一个引用, 这是一个变量.
‫所以你现在要做的就是建立一个对这个变量的引用.
‫当然, 如果我们输入log, 我们可以把它当作普通的浮点数打印出来,
‫我们可以输入damage冒号, 然后是percentage F, 这里我们可以只打印damage ref｡
‫我们不需要任何特殊的语法｡
‫我们可以像使用常规变量一样使用它｡
‫让我们在编译后点击播放, 看看我们的输出日志, 果然, 损坏是零,
‫这是我们设置的值｡
‫但这并不一定能证明我没有复制原始变量｡
‫让我们来挑战你, 试着改变这个值, 看看会发生什么｡
‫所以使用参考值时, 要把参考值损坏后重新设置一个新的值然后把原来的值打印出来,
‫这样原来的值在参考值旁边看看｡
‫它们是相同的还是不同的？
‫您只更改了引用, 但是否也更改了原始引用？
‫因为这意味着它们是同一个变量｡
‫暂停视频, 开始体验｡
‫好吧, 我会的
‫欢迎回来｡
‫我们来给予吧｡
‫现在要改变参考, 我们要做damage ref equals｡
‫这次我会说我们造成了五个破坏, 注意我在这里没有使用任何特殊的语法｡
‫它没有重指向引用, 因为我们已经声明了它, 并且在创建它的时候在第一行设置了它的引用｡
‫我们不能再这样了｡
‫现在我们可以设置值了｡
‫所以我现在能做的是我们已经得到了损坏, 裁判在日志中｡
‫让我们把damage和percent f放到同一个字符串上, 然后把damage也传递到这里｡
‫然后我们会编译并查看｡
‫让我们点击播放, 进入输出日志, 果然, 它打印出了damage ref和damage as,
‫两者都有新的值, 我们已经设置为5｡
‫所以本质上, 我们这里有两个变量指向同一个内存块｡
‫你几乎可以说它们是同一个变量, 只是名字不同｡
‫它的好处是不需要拷贝, 就像指针一样, 但它还有更多的好处,
‫因为它更容易使用｡
‫我们不需要所有额外的语法, 而且使用起来也更安全｡
‫因此, 只要我们不需要重新指向任何东西, 使用引用通常是更可取的｡
‫现在, 让我们快速回顾一下我们在这里使用的一些符号, 因为它们可能会让人有点困惑｡
‫它们在C++中被广泛使用｡
‫所以, &符号和星星, 让我们看看它们在上下文中的含义｡
‫当我们在表达式中使用它们的时候, 这里有一些代码示例｡
‫你可能会在变量前看到星星｡
‫您可能会在变量前面看到&符号｡
‫这是什么意思呢？
‫有了星星, 把它放在变量之前的语法意味着我们现在得到的是演员指针的内容,
‫还有&｡
‫如果你把&号放在变量前面或者变量引用前面, 它就表示它正在获取变量的地址｡
‫它获取参与者的地址或引用所指向的地址｡
‫现在当我们声明我们在变量的类型中使用它时, 星号和&符号的含义几乎相反｡
‫星星表示这是一个指向新参与者的指针, 而&符号表示这是一个指向新参与者的引用｡
‫记住,
‫这是一组完全不同的含义, 无论是在表达式中的变量中使用, 还是在声明变量的类型中使用.
‫现在, 我不想详细讨论它, 但雪上加霜的是,
‫在其他上下文中, 这些符号实际上可以有其他的含义, 而“&”符号可以有一点明智的含义, 正如我们已经看到的,
‫星星可以和U log中的字符串一起使用｡
‫所以这不一定是这两个符号的全部含义, 但是它们几乎是指针和引用的所有重要含义｡
‫好东西｡
‫因此, 我们已经了解了指针､ 引用､ 它们之间的关系､ 它们之间的区别,
‫以及我们为什么要使用它们｡
‫我们下节课再见｡