[英]How to retrieve the size of this array?
我正在使用IMidiQueue将IMidiMsg
对象排队/添加到我的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。我在哪里错了?
假设mMIDICreated
是一个指针 ,对指针执行sizeof
返回实际指针的大小,而不是其指向的大小。 还要注意,将数组传递给函数时,它会衰减为指向其第一个元素的指针。
如果函数需要数组中元素的数量,则需要将其作为参数传递给函数。
我推荐使用普通数组/指针的另一种解决方案是使用std::array
(用于在编译时已知的数组)和std::vector
用于“运行时”或动态数组。
查看您的链接:
class IMidiQueue
{
...
IMidiMsg* mBuf;
}
存储元素的缓冲区不计入sizeof()
返回的sizeof()
。 只有指针本身的大小。
但是,还有一个int GetSize()
方法可能对您有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.