如何查找指针数组中的指针数

时间:2014-11-20 11:24:30

标签: c++ arrays pointers

有没有办法找出指针数组中指针的长度/数量?

class Notifications {   
    iMessage **messages;
public:
    Notifications();
    Notifications(const Notifications&);
    Notifications& operator=(const Notifications&);
    Notifications(Notifications&&);
    Notifications&& operator=(Notifications&&);
    ~Notifications();
    void operator+=(const w5::iMessage&);
    void display(std::ostream&) const;

}

我怎样才能找到数组中的指针数量?

2 个答案:

答案 0 :(得分:3)

您有三种选择,按照增加良好的顺序:

将最后一个设为null,将所有其他设为非空。这是唯一需要您的数据的解决方案,将其视为c样式字符串,除了使用指针而不是char s。

for (iMessage** msg  = messages; *msg; ++msg) { ... }

将尺寸与消息一起存储:

iMessage **messages;
const size_t size;

for (size_t i = 0; i < size; ++i) {
    iMessage* msg = messages[i];
    // ...
}

使用专门设计的容器在连续的内存中存储任意数量的东西:

std::vector<iMessage*> messages;

for (iMessage* msg : messages) { 
    // ...
}

基本上是这样的,除非你事先知道messages的大小并且它是编译时常量,在这种情况下,其中一个:

iMessage* messages[100];
std::array<iMessage*, 100> messages; 

为您提供类型中的大小。

答案 1 :(得分:0)

没有标准的方法可以做到这一点。一些编译器具有返回所分配块的大小的函数,例如, Visual Studio中的_msize。如果你用指针的大小除以它,你将获得&#34;数组&#34;中的元素数量。

但除了非标准之外,这只有作用,如果&#34;数组&#34;已动态分配并且调用者打算使用整个块作为数组 - 情况并非总是如此:某些库在标准库之上构建自己的分配函数。他们分配大块,然后在内部进一步分发该块。

执行此操作的正确方法(而不是从指针中猜测大小)将是让创建数组的代码将大小传递给您并将其与指针一起存储。或者,您可以使用为您执行此操作的C ++类(除此之外还可以检查边界)。