c++ - 如何获取数组的大小?

标签 c++ arrays

<分区>

在 C# 中,我使用嵌入到数组中的 Length 属性来获取其大小。 如何在 C++ 中做到这一点?

最佳答案

这真的取决于你所说的“数组”是什么意思。 C++ 中的数组的大小(即现在的“原始”字节大小)等于一项大小的 N 倍。这样一来,可以使用 sizeof 运算符轻松获取项目数。但这要求您仍然可以访问该数组的类型。一旦你把它传递给函数,它就会被转换成指针,然后你就迷路了。无法再确定大小。您将不得不构建一些依赖于元素值来计算大小的其他方法。

这里有一些例子:

int a[5];
size_t size = (sizeof a / sizeof a[0]); // size == 5

int *pa = a; 

如果我们现在丢失名称“a”(及其类型),例如将“pa”传递给一个函数,而该函数只有该指针的值,那么我们就不走运了。然后我们就不能再收到尺寸了。我们需要将大小与指向该函数的指针一起传递。

当我们使用 new 获取数组时,同样的限制适用。它返回一个指向该数组元素的指针,因此大小将丢失。

int *p = new int[5];
  // can't get the size of the array p points to. 
delete[] p;

它不能返回一个包含数组类型的指针,因为用new 创建的数组的大小可以在运行时计算。但是 C++ 中的类型必须在编译时设置。因此,new 删除该数组部分,并返回指向元素的指针。请注意,您不需要在 C++ 中弄乱 new。您可以使用另一个答案推荐的 std::vector 模板。

关于c++ - 如何获取数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/874169/

相关文章:

c++ - 对几乎相同的代码执行不同的 vector 求和

java - 将列表转换为固定大小的数组

c - 在结构体中写入数组

c++ - 使用 malloc 指针的段错误

c++ - 是否可以逐列遍历 vector 的 vector ?

C++ 代码解释

C++ : const declrations duplicate symbols issue

arrays - 如何在 Matlab 中将 NaN 分配给值 j < k

c++ - 无法在Windows上构建PROJ-sqlite3的链接器错误

c - 遍历指向其他数组的数组