根据指向第一个和最后一个元素

时间:2015-05-19 04:48:17

标签: c++ arrays

假设存在一个数组A,其元素是struct Element,我被告知struct Element没有填充。

如果给出指向A中第一个和最后一个元素的指针,我可以根据指针的地址和Element占用的内存量来确定A中的元素数量吗?或者内存中数组的结构不能像那样工作。

我的想法是,如果我给出的指针是Element * start和Element * finish ...

number of elements = (finish - start) / sizeof(Element)

这是合乎逻辑的想法吗?

2 个答案:

答案 0 :(得分:7)

如果你有:

Element* start; // first element
Element* finish; // last element

然后:

numElements = finish - start + 1;
  1. 如果finish与STL中的end相似,则表示您没有+1
  2. 由于指针算术,您不必除以sizeof(Element)
  3. 关于考虑结构端是否可能存在填充,正如Billy指出的那样,sizeof已经包含了这一点,指针算法也是如此。来自C ++ 14最终稿:

      

    N3797 / 5.3.3 / 2 [sizeof]

         

    当应用于类时,结果是一个字节数   该类的对象,包括将该类型的对象放在数组中所需的任何填充。

答案 1 :(得分:0)

当你使用指针算术时,你可以说"单位"是指向的类型的一个元素的大小。

即。如果你有Element* start指向数组的第0个元素,start + 1将指向该数组的第1个元素。

因此,当您使用finish - start时,您已经获得了它们之间的元素数量,并且无需除以sizeof(Element)