gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:59 24 4
gpt4 key购买 nike

我正在从游戏开发的角度学习 C++,这源于与游戏无关的 C# 长期开发,但我很难掌握指针和取消引用的概念/使用。我已经将当前类(class)教科书中的这两章阅读了 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.
}

我想我没有得到的是,为什么?为什么不直接说 myValue = 5,然后 myValue = 10?通过为另一个变量或指针添加的层的目的是什么?任何有助于理解这一点的有用的输入、现实生活中的使用或指向一些阅读的链接都将不胜感激!

最佳答案

指针的用途是您第一次真正需要它们时才会完全意识到的东西。您提供的示例是不需要指针但可以使用指针的情况。这实际上只是为了展示它们是如何工作的。指针是一种记住内存位置的方法,而不必复制它指向的所有内容。阅读本教程,因为它可能会给您带来与类书籍不同的观点:

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

示例:如果您有一个这样定义的游戏实体数组:

std::vector<Entity*> entities;

并且您有一个可以“跟踪”特定实体的 Camera 类:

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

public:
void setTarget(Entity *target) { mTarget = target; }
}

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

entities.push_back(new Entity());
Camera camera;
camera.setTarget(entities.front());

现在,只要实体在游戏世界中的位置发生变化,相机就会在渲染到屏幕时自动访问最新位置。如果您没有使用指向实体的指针并传递一个拷贝,您将有一个过时的位置来渲染相机。

关于c++ - 为什么在 C++ 中使用指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20618843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com