假设存在一个数组A,其元素是struct Element,我被告知struct Element没有填充。
如果给出指向A中第一个和最后一个元素的指针,我可以根据指针的地址和Element占用的内存量来确定A中的元素数量吗?或者内存中数组的结构不能像那样工作。
我的想法是,如果我给出的指针是Element * start和Element * finish ...
number of elements = (finish - start) / sizeof(Element)
这是合乎逻辑的想法吗?
答案 0 :(得分:7)
如果你有:
Element* start; // first element
Element* finish; // last element
然后:
numElements = finish - start + 1;
finish
与STL中的end
相似,则表示您没有+1
。sizeof(Element)
关于考虑结构端是否可能存在填充,正如Billy指出的那样,sizeof
已经包含了这一点,指针算法也是如此。来自C ++ 14最终稿:
N3797 / 5.3.3 / 2 [sizeof]
当应用于类时,结果是一个字节数 该类的对象,包括将该类型的对象放在数组中所需的任何填充。
答案 1 :(得分:0)
当你使用指针算术时,你可以说"单位"是指向的类型的一个元素的大小。
即。如果你有Element* start
指向数组的第0个元素,start + 1
将指向该数组的第1个元素。
因此,当您使用finish - start
时,您已经获得了它们之间的元素数量,并且无需除以sizeof(Element)
。