<分区>
在 C# 中,我使用嵌入到数组中的 Length 属性来获取其大小。 如何在 C++ 中做到这一点?
<分区>
在 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/