【问题标题】:How to add data dynamically in structure which is a Pointer to an array of pointers如何在结构中动态添加数据,该结构是指向指针数组的指针
【发布时间】:2015-05-08 12:02:53
【问题描述】:

我有两个结构如下:

typdef struct abc
{
   int id;
   char name;
}s_abc,*lpabc;
typdef struct result
{
    int acc_no;
    lpabc *details;
}s_res;

我需要在指向指针数组的结构结果中动态添加数据,即:struct abc 结构abc 可以是一个包含 5 个值的数组,例如。 我应该如何添加值?

定义的结构是明确的: 为了更好地理解,我附上了以下结构:-

typedef struct _wfs_cdm_physicalcu
{
    LPSTR                 lpPhysicalPositionName;
    CHAR                  cUnitID[5];
    ULONG                 ulInitialCount;
    ULONG                 ulCount;
    ULONG                 ulRejectCount;
    ULONG                 ulMaximum;
    USHORT                usPStatus;
    BOOL                  bHardwareSensor; 
 } WFSCDMPHCU, *LPWFSCDMPHCU;

typedef struct _wfs_cdm_cashunit
{
    USHORT                usNumber;
    USHORT                usType;
    LPSTR                 lpszCashUnitName;
    CHAR                  cUnitID[5];
    CHAR                  cCurrencyID[3];
    BOOL                  bAppLock;
    USHORT                usStatus;
    USHORT                usNumPhysicalCUs;
    LPWFSCDMPHCU         *lppPhysical;

} WFSCDMCASHUNIT, *LPWFSCDMCASHUNIT;
typedef struct _wfs_cdm_cu_info
{
    USHORT                usTellerID;
    USHORT                usCount;
    LPWFSCDMCASHUNIT *lppList;
} WFSCDMCUINFO, *LPWFSCDMCUINFO;

这里我需要访问 _wfs_cdm_physicalcu 的数据 4 次,即:一个数组。

【问题讨论】:

  • 因为这是 C++,我建议你使用向量而不是动态数组。
  • 为什么它首先指向指针。除非设计明确要求,请考虑将其更改为指针或某些 C++ 容器。
  • 我完全不明白您要做什么...details 是一个指向数组的指针,您想要多个abcs?或者您想更改abc 中的字段数?这完全令人困惑lpabc *details; 为什么要创建指向指针的指针?也许尝试使用您想要实现的语义和语法发布代码。
  • @MohitJain :,我已经发布了 ref 的语法。

标签: c++ arrays pointers struct structure


【解决方案1】:

停止在 C++ 中使用 C 习语;这只会导致混乱。

#include <string>
#include <vector>

struct abc {
    int id;
    std::string name;
};
struct result {
    int acc_no;
    std::vector<abc> details;
};

现在您可以轻松地将任意数量的abc 值添加到数组中:

result r {42, {{1, "Mike"}, {2, "Fred"}}};  // inialise with two values
r.details.emplace_back(3, "Mary");         // add a third

【讨论】:

  • @TechBrkTru:你没有,你通过向量访问它们。 r.details[1].name == "Fred".
  • 在我的结构中... struct _wfs_cdm_physicalcu 的前两个值保持不变,其余是动态的。即使“其余值”发生变化,此结构的地址也必须相同。矢量确实使用一个动态分配的数组来存储它们的元素。但是 malloc 怎么样。因为我有一个链接结构,例如:a -> b->c,我需要 c 的值出现在“b”中,“b”的值出现在“a”中
  • @TechBrkTru:“malloc 怎么样”——就像我说的,不要在 C++ 中使用 C 习语。你可以用malloc 拼凑一些东西,小心避免内存泄漏和更糟糕的情况,但是vector 在为你管理所有内存分配的同时基本上做同样的事情。
  • :如果有另一个结构命名例如: typdef struct data { int a ; char b 结果 res;} .可以通过vector得到结构数据中结构abc的值吗??
  • @TechBrkTru:是的,您可以以通常的方式访问班级成员。给定data d;,您可以访问d.res.details[2].name
【解决方案2】:

我认为如果你想使用malloc,你应该定义一个指向struct abc的指针。然后,如果您找到一个新内存,您可以 malloc 新内存并通过指针访问它。我也认为 STL 向量会是一个更好的选择。非常方便。你可以学习一些关于STL的知识。太有趣了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2017-06-03
    • 2020-04-07
    • 2011-02-01
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多