【问题标题】:How to create a pointer to pointers如何创建指向指针的指针
【发布时间】:2015-03-03 15:49:23
【问题描述】:

我的问题是创建一个特定的矩阵。

我必须使用一个名为 ptr 的数组和 x 指针。这个数组中的每个指针都应该指向一个新数组(在这种情况下,一个int 数组;那么每个数组都是矩阵中的一个新行)。

所有x 数组都应使用new 创建;最后,应该可以使用ptr[a][b] 轻松访问矩阵。

经过多次尝试和失败,我希望有人可以帮助我。

提前谢谢你!

【问题讨论】:

  • 请发布您的尝试。
  • 你没有使用std::vector ?
  • @Quentin I have to use a pointer **ptr
  • @PaulMcKenzie 我没有保存任何尝试,因为失败太多(这对我来说并不聪明,对此感到抱歉)。不过,感谢您的努力!

标签: c++ arrays pointers dynamic


【解决方案1】:

由于这显然是家庭作业,为了你的,让我给你一个更好的答案,以配合接受的答案。

std::vector<std::vector<int>> matrix(10, std::vector<int>(10));
//                                   ^   ^                ^
//                Column count ______|   |________________|
//                                       |
//                                       |___ Each column is 
//                                            initialized with 
//                                            a vector of size 10.

这是一个 10x10 矩阵。由于我们使用向量,因此大小是动态的。对于静态大小的数组,您可以根据需要使用std::array。另外,这里是std::vector 的参考。

【讨论】:

    【解决方案2】:

    如果数组中的指针数量已知,您可以简单地使用指向 int 的原始指针数组:

    int* my_array[10]; // 10 int*
    

    然后你应该为数组中的每个指针单独分配内存,通常使用 for 循环:

    for(int i=0; i<10; i++){
        // each int* in the array will point to an area equivalent to 10 * sizeof(int)
        my_array[i] = new int[10]; 
    }
    

    另一方面,如果你不知道数组的大小,那么你需要一个指向指针的指针:

    int** ptr_to_ptr = new int*[10]; 
    

    请注意,我为 10 int* 而不是 int 分配空间。

    记得释放上面分配的内存也用于内部指针,一旦你不再需要该内存。

    【讨论】:

    • 非常适合我,甚至可以通过 ptr[a][b] 访问所有内容。现在我对它的工作原理有了更好的了解,非常感谢!
    • @Everknow 没问题伙计 :) 但我建议你看看其他例子。这个话题不是很明显,你需要阅读一个好的指南才能完美理解它;)
    • @Rinzler 这种方法有一些缺陷,尽管它几乎一直用于从T** 创建一个二维数组。一个缺陷是,如果对 new[] 的调用在循环中间抛出异常,则无法恢复。
    • @PaulMcKenzie 是的,它可能会抛出,但对于这种情况,我认为这就足够了。如果您想改进答案,请随意,我很乐意学习新事物。
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多