使用C++动态分配结构的多维数组
Dynamically allocate Multi-dimensional array of structure using C++
对于学校项目,我正在尝试动态声明一个结构数组,其中行和列作为命令行界面的输入。我一直在阅读有关指针到指针概念的信息,并想知道我的定义在我需要的内容方面是否正确。 所以基本上我需要一组结构,这些结构可以针对行和列动态扩展。 到目前为止,我已经这样做了。
在全球范围内
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 的一维指针数组。然后创建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
相关文章:
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 如何使用函数的输出初始化 const 数组结构字段?
- 传递数组结构、ofstream 和 interger 以运行
- 从文本文件中读取并输入到数组结构中,然后显示读取的数据C++
- 将文本文件读取到数组结构中
- C/C++中数组结构和数组结构的通用接口
- C++ MDC final-在字符类型的数组结构中按字母顺序对记录中的名称进行排序
- C++ 使用数组结构创建平衡的二叉搜索树
- C++:释放动态数组(结构成员)和指向此结构的指针的方法
- 使用 vector 在 c++ 中声明 3D 数组结构
- 数组结构无法正确打印
- 如何在C++中访问数组结构内部的数组结构
- CIN进入数组结构似乎什么也没输入
- ifstream将数组结构到txt文件中,然后尽可能将其提取为数组
- wlanapi-将WlanFreeMemory释放其WLAN_INTERFACE_INFO数组结构
- 显示数组结构 c++
- C++ 使用函数访问数组结构的方法是什么?
- 将庞大的数组结构复制到 GPU
- 如何封送包含字符矩阵的数组结构
- C++多维数组结构的对齐