为什么在C++中使用指针?

Vol*_*rix 5 c++ pointers dereference

我从游戏开发的角度来学习C++来自C#的长期开发与游戏无关,但是我很难掌握指针和解引用的概念/用法.我已经阅读了我目前的课程教科书中的两章,实际上已经阅读了3次,甚至还搜索了一些与它们相关的不同页面,但它似乎并没有很好地融合在一起.

我想我得到了这个部分:

#include <iostream>

int main()
{
    int myValue   = 5;
    int* myPointer = nullptr;

    std::cout << "My value: " << myValue << std::endl; // Returns value of 5.
    std::cout << "My Pointer: " << &myValue << std::endl; // Returns some hex address.

    myPointer  = &myValue; // This would set it to the address of memory.
    *myPointer = 10; // Essentially sets myValue to 10.

    std::cout << "My value: " << myValue << std::endl; // Returns value of 10.
    std::cout << "My Pointer: " << &myValue << std::endl; // Returns same hex address.
}
Run Code Online (Sandbox Code Playgroud)

我觉得我没有得到的是,为什么?为什么不说myValue = 5,那么myValue = 10?为另一个变量或指针添加图层的目的是什么?任何有用的输入,现实生活使用或链接到一些有助于理解这一点的阅读将非常感激!

Dan*_*ins 14

指针的目的是你在第一次真正需要它们之前不会完全意识到的.您提供的示例是不需要指针但可以使用的情况.这只是为了展示它们的工作原理.指针是记住内存的一种方式,无需复制它所指向的所有内容.阅读本教程,因为它可能会为您提供与课本不同的视图:

http://www.cplusplus.com/doc/tutorial/pointers/

示例:如果您有一组定义如下的游戏实体:

std::vector<Entity*> entities;
Run Code Online (Sandbox Code Playgroud)

你有一个可以"跟踪"特定实体的Camera类:

class Camera
{
private:
   Entity *mTarget;  //Entity to track

public:
   void setTarget(Entity *target) { mTarget = target; }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Camera引用实体的唯一方法是使用指针.

entities.push_back(new Entity());
Camera camera;
camera.setTarget(entities.front());
Run Code Online (Sandbox Code Playgroud)

  • @DanWatkins:这段代码有一个微妙的问题,*稳定性*.将元素添加到`vector`时,它可以将它保存的所有先前元素重定位到另一个内存位置,从而使先前创建的所有引用/迭代器无效.因此,"相机"将很快挂在**悬挂指针**上. (2认同)