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

问题描述 投票:5回答:11

我正在从游戏开发的角度学习C ++,这是由于C#的长期开发与游戏无关,但是在掌握指针的概念/使用和取消引用方面遇到了相当大的困难。我已经阅读了我当前课程教科书中的这两章,字面意思是3次,甚至在Google上搜索了与它们有关的一些不同页面,但似乎并没有很好地融合在一起。

我想我得到了这一部分:

#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?遍历添加的层中的另一个变量或指针的目的是什么?非常感谢您提供任何有用的输入,现实生活中使用的内容或指向某些阅读的链接,这些都将有助于您理解这一点!

c++ pointers dereference
11个回答
14
投票
指针的目的是直到您第一次真正需要它们时才充分意识到。您提供的示例是不需要指针但可以使用指针的情况。这实际上只是为了展示它们如何工作。指针是一种记住内存位置的方法,而不必在其指向的所有内容之间进行复制。阅读本教程,因为它可能给您与课本不同的观点:

0
投票
将指针传递给函数时,它会更有意义,请参见以下示例:

0
投票
在编程中使用指针是一个很漂亮的概念。为了动态分配内存,必须使用指针存储我们保留的内存的第一个位置的地址,而释放内存的情况也是如此,我们需要指针。确实有人在上述答案中说过,只有在需要时您才能理解poinetrs的用法。一个例子是,您可以使用指针和动态备忘录分配来创建可变大小的数组。重要的一点是,由于我们间接访问位置,因此使用指针可以更改位置的实际值。更重要的是,当我们需要通过引用传递值时,有时引用不起作用,因此我们需要指针。

1
投票
例如,某些对象没有名称。它可以是分配的内存或从函数返回的地址,也可以是迭代器。当然,在您的简单示例中,无需声明指针。但是,在许多情况下,例如当您处理C字符串函数时,您需要使用指针。一个简单的例子

1
投票
主要在需要动态分配内存时使用指针。例如,要实现某些数据结构,如链接列表,树等。

1
投票
从C#的角度来看,指针与C#中的对象引用完全相同-它只是存储实际数据的内存中的地址,通过取消引用它,您可以使用此数据进行操作。

1
投票

TL; DR


1
投票
如果通过值传递int,则将无法更改调用者的值。但是,如果将指针传递给int,则可以对其进行更改。这就是C更改参数的方式。 C ++可以通过引用传递值,因此它用处不大。

1
投票
以您有一个指向类的指针为例。

1
投票
通过附加层的另一个变量或指针的目的是什么?

1
投票
指针(或引用)对于在C ++中使用动态多态性至关重要。它们是您使用类层次结构的方式。
© www.soinside.com 2019 - 2024. All rights reserved.