如何获取指针数组中的元素数量?

use*_*287 3 c++ arrays pointers

如何获取指针数组中的元素数量?

以下是我的代码:

struct mystruct     
{    
  int a;    
  char ch[10];    
  int c;    
};

mystruct *m_arr[2];
Run Code Online (Sandbox Code Playgroud)

我在其他一些文件中遍历此数组.我没有在每个文件中硬编码为2,而是想以编程方式获取数组中的元素数量.

Mar*_*ica 8

不要使用原始数组.使用像std::vector或的标准容器std::array.这两个都有一个.size()成员,并允许基于范围的语法:

    for (mystruct* p : m_arr)
Run Code Online (Sandbox Code Playgroud)

如果你需要C兼容性,它们都提供了一个data()成员函数,它返回一个指向底层数组中第一个元素的指针.(在你的情况下,那将是一个mystruct **)


编辑:原始数组还支持基于范围的语法 - 但当可见声明包含元素数量时(这样my_struct* m_arr[2];很好,但my_struct* m_arr[]不起作用).如果std::array没有定义大小,也无法声明.其他容器(如std::vector)不包括声明中的大小.


P.W*_*P.W 6

通常的做法是:

size_t sizeOfArray = sizeof(m_arr)/sizeof(m_arr[0]);
Run Code Online (Sandbox Code Playgroud)

关于size_t来自维基:

size_t是一个无符号整数类型,用于表示特定实现中任何对象(包括数组)的大小.sizeof运算符产生size_t类型的值.size_t的最大大小是通过SIZE_MAX提供的,SIZE_MAX是一个宏常量,它在头文件中定义(C++中的cstdint头).size_t保证至少为16位宽.

  • 在某些平台上,您可以使用`_countof`宏:`size_t sizeOfArray = _countof(m_arr)`; (2认同)