C++ 如何在指针数组中查找指针数

C++ 如何在指针数组中查找指针数,c++,arrays,pointers,C++,Arrays,Pointers,有没有办法找出指针数组中指针的长度/数量 i、 e 我如何才能找到数组中指针的数量 没有标准的方法来做这件事。某些编译器具有返回已分配块大小的函数,例如Visual Studio中的msize。如果你将它除以指针的大小,你将得到“数组”中的元素数 但是,除了非标准之外,只有当“数组”已被动态分配,并且调用者打算为数组使用整个块时,这才有效——情况并非总是这样:有些库在标准库的基础上构建自己的分配函数。他们分配大的块,然后在内部进一步分配该块 正确的方法(而不是从指针猜测大小)是让创建数组的代码将

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

i、 e


我如何才能找到数组中指针的数量

没有标准的方法来做这件事。某些编译器具有返回已分配块大小的函数,例如Visual Studio中的msize。如果你将它除以指针的大小,你将得到“数组”中的元素数

但是,除了非标准之外,只有当“数组”已被动态分配,并且调用者打算为数组使用整个块时,这才有效——情况并非总是这样:有些库在标准库的基础上构建自己的分配函数。他们分配大的块,然后在内部进一步分配该块


正确的方法(而不是从指针猜测大小)是让创建数组的代码将大小传递给您,并将其与指针一起存储。或者,你可以使用C++类来为你做这些(除了这个之外还可以进行边界检查)。某些编译器具有返回已分配块大小的函数,例如Visual Studio中的msize。如果你将它除以指针的大小,你将得到“数组”中的元素数

但是,除了非标准之外,只有当“数组”已被动态分配,并且调用者打算为数组使用整个块时,这才有效——情况并非总是这样:有些库在标准库的基础上构建自己的分配函数。他们分配大的块,然后在内部进一步分配该块


正确的方法(而不是从指针猜测大小)是让创建数组的代码将大小传递给您,并将其与指针一起存储。或者,你可以使用C++类来为你做这些(除了这个之外还可以进行边界检查)。某些编译器具有返回已分配块大小的函数,例如Visual Studio中的msize。如果你将它除以指针的大小,你将得到“数组”中的元素数

但是,除了非标准之外,只有当“数组”已被动态分配,并且调用者打算为数组使用整个块时,这才有效——情况并非总是这样:有些库在标准库的基础上构建自己的分配函数。他们分配大的块,然后在内部进一步分配该块


正确的方法(而不是从指针猜测大小)是让创建数组的代码将大小传递给您,并将其与指针一起存储。或者,你可以使用C++类来为你做这些(除了这个之外还可以进行边界检查)。某些编译器具有返回已分配块大小的函数,例如Visual Studio中的msize。如果你将它除以指针的大小,你将得到“数组”中的元素数

但是,除了非标准之外,只有当“数组”已被动态分配,并且调用者打算为数组使用整个块时,这才有效——情况并非总是这样:有些库在标准库的基础上构建自己的分配函数。他们分配大的块,然后在内部进一步分配该块


正确的方法(而不是从指针猜测大小)是让创建数组的代码将大小传递给您,并将其与指针一起存储。或者,你可以使用C++类来为你做这个(并且可能还有边界检查)。< /P> < p>你有三个选项,为了增加良率:

将最后一个设置为null,将所有其他设置为非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];
    // ...
}

为您提供正确的字体大小

您有三个选项,按增加善度的顺序排列:

将最后一个设置为null,将所有其他设置为非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];
    // ...
}

为您提供正确的字体大小

您有三个选项,按增加善度的顺序排列:

将最后一个设置为null,将所有其他设置为非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];
    // ...
}

为您提供正确的字体大小

您有三个选项,按增加善度的顺序排列:

将最后一个设置为null,将所有其他设置为非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];
    // ...
}


为您提供正确的字体大小

简单的普通数组不会告诉你,iMessage对象的地址是用指针数组保存的,所以IMSessage *Message代码中没有一个数组。使用向量,我敢打赌,许多问题会消失,你标记了这个C++,所以<代码> STD::向量< /代码>将帮助你,除了解决或防止可能出现的许多问题外,简单的纯数组不会告诉你IMessage对象的地址是用指针数组来保存的,所以IMSessage *消息在你的代码中没有一个数组。使用向量,我敢打赌,很多问题会消失,你标记了这个C++,所以<代码> STD::向量< /代码>将帮助你,以及解决/预防许多无法解决的问题