假设我们有一个最多50个元素的结构数组,它们将依次从缓冲区写入函数中添加。如果尚未达到最大项目数,如何找到阵列中的当前录制数量?
typedef struct
{
remoteInstructionReceived_t instruction;
uint16_t parameter;
} instructionData_type;
remoteInstructionReceived_t commandBuffer[50];
答案 0 :(得分:1)
C数组是固定大小的:数组中总是有50个对象。如果你的程序逻辑要求其中一些是"不活动" (例如,尚未写入),您必须单独跟踪此类信息。例如,您可以使用size_t
变量来存储"有效"的数量。数组中的条目。
另一种方法是将remoteInstructionReceived_t
的值指定为终止符,类似于0
如何用作NUL终止字符串的终止符。然后,你不必跟踪"有用的长度"数组的单独,但你必须确保终结符始终跟在其中的最后一个有效项。
通常,长度跟踪可能更有效,更易于维护。我只是提到完整性的第二个(终结者)选项。
答案 1 :(得分:0)
你不能,C不知道变量"是否有值"。所有值都是值,没有任何值比其他值更真实。
答案是需要额外的状态,即某种形式的计数器变量来保存这些信息。通常,您在插入新记录时使用它,以了解下一条记录的去向。
答案 2 :(得分:0)
您是否考虑过使用其他数据结构?例如,您可以包装结构以允许创建链接列表。通过释放内存,删除将是真实的。此外,它对某些类型的操作更有效,例如列表中间的addin元素。