C++ 存储结构的动态数组

C++ 存储结构的动态数组,c++,c,arrays,pointers,struct,C++,C,Arrays,Pointers,Struct,我一直在做一个利用动态结构阵列的项目。为了避免在它自己的变量中存储结构的数量(结构的计数),我使用了一个带有NULL终止符的指向结构变量的指针数组 例如,假设我的结构类型定义为: typedef struct structure_item{ /* ... Structure Variables Here ... */ } item_t; 现在让我们假设我的代码有item_t**allItems={item_1,item_2,item_3,…,item_n,NULL}和所有项目35;都属

我一直在做一个利用动态结构阵列的项目。为了避免在它自己的变量中存储结构的数量(结构的计数),我使用了一个带有
NULL
终止符的指向结构变量的指针数组

例如,假设我的结构类型定义为:

typedef struct structure_item{
    /* ... Structure Variables Here ... */
} item_t;
现在让我们假设我的代码有
item_t**allItems={item_1,item_2,item_3,…,item_n,NULL}和所有
项目35;
都属于
项目t*
类型

使用这个设置,我就不必跟踪另一个变量,它告诉我项目的总数。相反,我可以根据需要通过以下方式确定项目总数:

int numberOfStructures;
for( numberOfStructures = 0;
     *(allItems + numberOfStructures) != NULL;
     numberOfStructures++
  );
执行此代码时,它统计
NULL
之前的指针总数

作为比较,该系统类似于C样式字符串;然而,跟踪结构的总数类似于Pascal样式的字符串。(因为C使用
NULL
终止的字符数组,而Pascal跟踪其字符数组的长度。)

我的问题很简单,指针数组(指向结构的指针)真的有必要吗?还是可以用结构数组(指向结构的指针)来实现?有谁能提供更好的方法来处理这个问题吗

<强>注:>解决方案与C++ <强>和c++兼容很重要。这是在包装容器中使用的,它封装了C++库,用于标准C.< 提前谢谢大家

您需要的是一个哨兵值,一个表示“无”的可识别有效值。对于指针,标准sentinel值为
NULL

如果要直接使用结构,则需要确定类型为
item\u t
的sentinel值,并进行检查。您的呼叫。

您需要的是一个哨兵值,一个表示“无”的可识别有效值。对于指针,标准sentinel值为
NULL

如果要直接使用结构,则需要确定类型为
item\u t
的sentinel值,并进行检查。您的呼叫。

您需要的是一个哨兵值,一个表示“无”的可识别有效值。对于指针,标准sentinel值为
NULL

如果要直接使用结构,则需要确定类型为
item\u t
的sentinel值,并进行检查。您的呼叫。

您需要的是一个哨兵值,一个表示“无”的可识别有效值。对于指针,标准sentinel值为
NULL


如果要直接使用结构,则需要确定类型为
item\u t
的sentinel值,并进行检查。您的调用。

是的,可以有一个结构数组,并且(至少)其中一个是已定义的sentinel(即字符串末尾使用的“\0”,在您的情况下使用空指针)

对于结构类型,您需要做的是保留该结构的一个或多个可能值(由其成员的值集组成)以指示哨兵

例如,假设我们有一个结构类型

struct X {int a; char *p};
然后定义一个函数

int is_sentinel(struct X x)
{
    return x.p == NULL;
}
这意味着成员p为NULL的任何结构X都可以用作哨兵(在这种情况下,成员a无关紧要)

然后循环寻找哨兵


注释:在C和C++中都兼容,结构类型需要兼容(例如POD)。

< P>是的,它可能有一个结构数组,至少有一个定义的哨兵(即在字符串末尾使用的‘0’,在你的情况下是空指针)。 对于结构类型,您需要做的是保留该结构的一个或多个可能值(由其成员的值集组成)以指示哨兵

例如,假设我们有一个结构类型

struct X {int a; char *p};
然后定义一个函数

int is_sentinel(struct X x)
{
    return x.p == NULL;
}
这意味着成员p为NULL的任何结构X都可以用作哨兵(在这种情况下,成员a无关紧要)

然后循环寻找哨兵


注释:在C和C++中都兼容,结构类型需要兼容(例如POD)。

< P>是的,它可能有一个结构数组,至少有一个定义的哨兵(即在字符串末尾使用的‘0’,在你的情况下是空指针)。 对于结构类型,您需要做的是保留该结构的一个或多个可能值(由其成员的值集组成)以指示哨兵

例如,假设我们有一个结构类型

struct X {int a; char *p};
然后定义一个函数

int is_sentinel(struct X x)
{
    return x.p == NULL;
}
这意味着成员p为NULL的任何结构X都可以用作哨兵(在这种情况下,成员a无关紧要)

然后循环寻找哨兵


注释:在C和C++中都兼容,结构类型需要兼容(例如POD)。

< P>是的,它可能有一个结构数组,至少有一个定义的哨兵(即在字符串末尾使用的‘0’,在你的情况下是空指针)。 对于结构类型,您需要做的是保留该结构的一个或多个可能值(由其成员的值集组成)以指示哨兵

例如,假设我们有一个结构类型

struct X {int a; char *p};
然后定义一个函数

int is_sentinel(struct X x)
{
    return x.p == NULL;
}
这意味着成员p为NULL的任何结构X都可以用作哨兵(在这种情况下,成员a无关紧要)

然后循环寻找哨兵


注意:在C和C++中都兼容,Stutt类型需要兼容(例如POD)。

除非你有一个简单的方法来检测最后一个空类型结构,否则指针的间接使用是理想的。此外,使用指针,您可以在不移动大型结构的情况下进行重组,并使用