如何获取指针数组中的元素数量?
How to get number of elements in the array of pointers?
如何获取指针数组中的元素数?
下面是我的代码:
struct mystruct
{
int a;
char ch[10];
int c;
};
mystruct *m_arr[2];
我正在其他一些文件中遍历此数组。我想以编程方式获取数组中的元素数,而不是在每个文件中硬编码为 2。
不要使用原始数组。 使用标准容器,如std::vector
或std::array
。 这两者都有一个.size()
成员,并允许基于范围的语法:
for (mystruct* p : m_arr)
如果需要 C 兼容性,它们都提供了一个data()
成员函数,该函数返回指向基础数组中第一个元素的指针。 (在您的情况下,这将是一个mystruct **
(
编辑:原始数组还支持基于范围的语法 - 但前提是可见声明包含元素的数量(所以my_struct* m_arr[2];
很好,但my_struct* m_arr[]
不起作用(。 如果不定义大小,就不可能声明std::array
。 其他容器(如std::vector
( 不要在声明中包含大小。
通常的方法是:
size_t sizeOfArray = sizeof(m_arr)/sizeof(m_arr[0]);
关于维基size_t
:
size_t 是一个无符号整数类型,用于表示特定实现中任何对象(包括数组(的大小。sizeof 运算符生成类型为 size_t 的值。size_t的最大大小通过 SIZE_MAX 提供, 是在标头中定义的宏常量(C++ 中的 cstdint 标头(。size_t保证至少为 16 位宽。
如果这是使用m_arr
的所有其他源代码文件包含的头文件,则可以使用sizeof(m_arr)/sizeof(m_arr[0])
来获取数组中的元素数。但这真的很危险。如果在某个时候指针m_arr
输入一个函数作为参数,则该函数的作用域将不会返回 2sizeof(m_arr)
而是指针在内存中占用的字节数,可能是 8。
因此,如果你想坚持使用普通C,那么你必须在一个单独的变量中传递元素的数量。但是,如果您可以使用C++那么还有各种更好,更安全甚至更快的解决方案。
你总是可以做这样的内存算术:
size_t arraySize = sizeof(m_arr) / sizeof(m_arr[0]);
但是,如果您没有像何时使用数组而不是向量/字符串这样的原因?
然后你应该使用一个std::array<mystruct*, 2> m_arr;
,你可以通过m_arr.size()
访问它的大小,以及你通过m_arr.data()
获得的底层原生数组的地址。
在 C++17 中,您可以#include <iterator>
并使用std::size(m_arr)
。
假设您的数组如下所示:
char *array[3];
向数组添加一个额外的项,该项被视为用作数组终止符。
char *array[3]={"First element","Second element",""};
其余的取决于你自己的编码风格,你可以检查终止符并计算除终止字符串之外的元素数量。
是的,使用 std::vector,但如果必须...
这适用于 C++11 或更高版本:
template <typename T, std::size_t N>
constexpr std::size_t sizeofArray(T(&)[N]) {
return N;
}
最近在一段关于您今天可以采用的 7 个 C++ 功能的视频中看到了这一点
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀