如何检索此数组的大小?

时间:2016-04-04 12:47:07

标签: c++ arrays size

我正在使用IMidiQueueIMidiMsg个对象排队/添加到IMidiQueue mMIDICreated;

在某些时候,我想检索我在其上添加的项目数量。我试过这个:

char buffer[50];
sprintf(buffer, "size %d\n", sizeof(mMIDICreated) / sizeof(IMidiMsg));
OutputDebugString(buffer);

但添加了8项后:

for (int i = 0; i < 4; i++) {
    IMidiMsg* one = new IMidiMsg;
    // ...
    mMIDICreated.Add(one);

    IMidiMsg* two = new IMidiMsg;
    // ...
    mMIDICreated.Add(two);
}

它返回2,而不是8.我在哪里错了?

3 个答案:

答案 0 :(得分:3)

sizeof将返回对象的大小或类型本身,它是一个常量并在编译时进行评估,与只能在运行时才能知道的项目数无关。 / p>

您应该使用IMidiQueue::ToDo

  

返回队列中的MIDI消息数。

答案 1 :(得分:2)

假设mMIDICreated指针,对指针执行sizeof会返回实际指针的大小,而不是它指向的大小。另请注意,将数组传递给函数时,衰减到指向其第一个元素的指针。

如果函数需要数组中的元素数,则需要将其作为参数传递给函数。

另一种解决方案,我建议使用普通数组/指针的方法是使用std::array(对于编译时已知的数组)和std::vector进行&#34;运行-time&#34;或动态数组。

答案 2 :(得分:1)

查看您的链接:

class IMidiQueue
{
    ...
    IMidiMsg* mBuf;
}

存储元素的缓冲区不会被sizeof()返回。只有指针本身的大小。

但是,还有一种方法int GetSize()对您有用。