使用C++动态分配结构的多维数组

Dynamically allocate Multi-dimensional array of structure using C++

本文关键字:数组 结构 C++ 动态分配 使用      更新时间:2023-10-16

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

在全球范围内

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]

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

这些陈述

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

创建指向类型 st2_D 的一维指针数组。然后创建rowsppst2_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