在运行时查找数组的大小

时间:2012-03-10 14:51:32

标签: c++ c arrays sizeof

  

可能重复:
  How to find the sizeof(a pointer pointing to an array)

我将数组传递给函数。是否有任何方法可以在该函数中找到数组的大小。

我认为sizeof函数不起作用,因为只有指向数组第一个元素的指针传递给函数。

sizeof(arr)/sizeof(arr[0])

我认为上述代码不起作用。还有其他任何方式...

...谢谢

4 个答案:

答案 0 :(得分:4)

使用原始数组,一旦作为指向函数的指针传递,就没有简单或可靠的方法来查找它的大小。 (例如,我不计算从二进制文件中读取调试信息这么简单。)

在C ++中,您可能应该使用std::vector<YourType>,然后您可以轻松找到。

在C中,你必须确保传递大小和指针。

答案 1 :(得分:2)

如果您的c ++标记很严重,可以使用std::vector,因为它会保留大小信息vec.size()。否则,您需要将大小传递给函数,或者让结构/类保持数组和大小。

答案 2 :(得分:1)

如果你只有一个指向第一个元素的指针,那么没有,就无法知道数组的大小。如果你真的需要知道尺寸,你有几个选择;

  • 使用普通数据中不存在的值终止数组(示例是\ 0,因为C用于终止字符串或指针数组中的NULL)
  • 使用数组传递数组的长度。
  • 更改为了解大小的数据类型,例如std :: vector(不是C中的选项,但您也标记了C ++)
  • 创建自己的结构,可以包含大小+数组指针并传递它。

答案 3 :(得分:0)

不,没有。这就是为什么C标准库中的所有合理函数都传递一对(pointer, size)作为参数。在C ++中,惯例是传递两个指针,(start, end)代替,这几乎是等价的。