【问题标题】:Why do we use pointers instead of simply creating an array of specific size?为什么我们使用指针而不是简单地创建特定大小的数组?
【发布时间】:2017-04-19 15:15:44
【问题描述】:

我是 C++ 新手,如果之前有人问过这个问题,我很抱歉,但我找不到。 为什么我们使用指针而不是简单地创建一个特定大小的数组?

  int** ary = new int*[rowCount];
   for(int i = 0; i < rowCount; ++i)
    ary[i] = new int[colCount];

int ary[rowCount][colCount]; 

这两者有什么区别? 我知道第一个适用于堆内存,第二个适用于堆栈,但为什么大多数人使用第一种方法?

【问题讨论】:

  • 语言的效率/功能允许您使用内存位置而不是巨大的数据对象......
  • 因为你是 C++ 新手,你肯定会找到更多关于通过分配内存来引用事物的优点(和缺陷)的信息......
  • 想象一下。你要把一堆积木放在桌子上。桌子上有一堆垃圾。您是否愿意:1)将所有积木粘在一起,然后必须在桌子上的所有东西上移动以使其适合....或2)将积木放在桌子上适合的任何位置,然后只记住块在哪里。在这两种情况下,您对任何块一无所知,但您知道它们都在哪里。处理东西时的问题之一是,当您处理完块时,在这两种情况下,您都希望记住删除所有块。
  • 您的两个代码 sn-ps 之间的主要区别是堆栈与堆分配。第一个将从堆中分配,而第二个将在堆栈上。第一个要求您使用显式的delete 语句手动释放内存,而第二个将在离开当前范围时自动释放。每个都适用于不同的场景,所以这取决于你想要做什么。
  • 这些是新手 C++ 程序员在完成初始学习课程、书籍演示等时将学习的概念。这是从 C 继承的概念。

标签: c++ arrays pointers dynamic-memory-allocation


【解决方案1】:

一个区别是第二个只有在 rowCount 和 colCount 都是 constant expressions 时才会编译。另见Array declaration

另一方面,即使这些变量在运行时发生变化,第一个也会编译。

顺便说一句,这一切都与 C 类似。如果您使用 C++,则最好使用std::vector 作为第一个选项,std::array 作为第二个选项。

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2013-09-13
    • 2020-07-02
    相关资源
    最近更新 更多