【问题标题】:Dynamically allocate Multi-dimensional array of structure using C++使用 C++ 动态分配结构的多维数组
【发布时间】:2020-01-24 14:54:21
【问题描述】:

对于一个学校项目,我试图动态声明一个结构数组,其中行和列作为命令行界面的输入。我一直在阅读有关指针概念的指针,并想知道我的定义是否符合我的需要。 所以基本上我需要一个可以相对于行和列动态扩展的结构数组。 到目前为止,我已经这样做了。

在全局范围内

struct st2_D
{
uint8_t ucvar1;
uint32_t ui32var2; 
}
st2_D ** ppst2_D;

main() 中,我有以下定义:

ppst2_D = new st2_D * [rows]
for(uint32_t var = 0; var < rows; var++) ppst2_D[var] = new st2_d[cols]

那么这会创建一个具有给定行和列的结构数组吗?另外,我将如何访问特定行和列的结构元素?

【问题讨论】:

  • 您知道如何为“1d”类数组对象使用索引(使用ppst2_D[var])。您认为如何扩展语法以索引“2d”类数组对象?

标签: c++ pointers multidimensional-array dynamic


【解决方案1】:

这些陈述

ppst2_D = new st2_D * [rows]
for(uint32_t var = 0; var < rows; var++) ppst2_D[var] = new st2_d[cols]

创建一个指向类型 st2_D 的指针的一维数组。然后创建rows ppst2_D[var] 类型的一维数组。

您可以像使用通常的二维数组一样使用任一索引,例如

ppst2_D[i][j]

或者您可以使用例如指针算法,例如

*( *( ppst2_D + i ) + j )

甚至是它们的组合,例如

( *( ppst2_D + i ) )[j]

*( ppst2_D[i] + j )

这是一个演示程序。

#include <iostream>
#include <iomanip>

int main() 
{
    size_t n = 5;
    int **a = new int *[n];

    for ( size_t i = 0; i < n; i++ )
    {
        a[i] = new int[n];
    }

    for ( int **p = a; p != a + n; ++p )
    {
        for ( int *q = *p; q != *p + n; ++q )
        {
            *q = q - *p + ( p - a ) * n;
        }
    }

    for ( size_t i = 0; i < n; i++ )
    {
        for ( size_t j = 0; j < n; j++ )
        {
            std::cout << std::setw( 2 ) << a[i][j] << ' ';
        }

        std::cout << '\n';
    }

    for ( size_t i = 0; i < n; i++ )
    {
        delete [] *( a + i );
    }

    delete [] a;

    return 0;
}

它的输出是

 0  1  2  3  4 
 5  6  7  8  9 
10 11 12 13 14 
15 16 17 18 19 
20 21 22 23 24 

【讨论】:

  • 所以这种方法也适用于多维结构,对吧?因为你已经举了一个整数的例子。
  • @NISHITKHARA 数组元素的类型并不重要。
猜你喜欢
  • 1970-01-01
  • 2012-05-17
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
相关资源
最近更新 更多