在函数中查找c数组的大小

时间:2014-03-24 11:24:31

标签: c++ arrays pointers

我正在尝试编写一个简短的函数,它接受一个指向数组的指针并简单地返回它的大小。到目前为止,我所拥有的是这样的:

int main (void) {
   double MyArray[3] = {0, 1, 2};

   int Temp = ArraySize(MyArray);

   return 0;
}

int ArraySize(double * MyArray) {
   return sizeof(MyArray) / sizeof(*MyArray);
}

但这似乎不起作用。 任何帮助,赞赏, 千斤顶

3 个答案:

答案 0 :(得分:3)

这是不可能的 - 指针只是指向数组的第一个元素。没有办法从中提取数组大小。

您可以通过引用传递数组,并将大小推断为模板参数:

template <typename T, size_t N>
size_t ArraySize(T (&)[N]) {return N;}

这只有在您可以访问数组本身时才会起作用(就像您在示例中所做的那样)。如果它已经衰减为指针,则大小信息已丢失。

答案 1 :(得分:0)

不可能,你需要在函数中传递长度与数组。像,

int ArraySize(double * MyArray, size_t length)

答案 2 :(得分:0)

你无法做你想做的事。函数MyArray中的ArraySize是指向double的指针,而不是double的数组。您必须显式传递数组长度以及数组的基址。