繁体   English   中英

如何获取此数组的大小?

[英]How to retrieve the size of this array?

我正在使用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。我在哪里错了?

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

您应该使用IMidiQueue::ToDo

返回队列中MIDI消息的数量。

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

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


我推荐使用普通数组/指针的另一种解决方案是使用std::array (用于在编译时已知的数组)和std::vector用于“运行时”或动态数组。

查看您的链接:

class IMidiQueue
{
    ...
    IMidiMsg* mBuf;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM