假设我有一个n个元素的数组,并且我有一个指向其中一个元素的指针。仅基于此信息,是否可以找出阵列中元素的位置?
答案 0 :(得分:3)
如果你确定元素在数组中,那么是的,很简单:
position = the_pointer - the_array;
// or
position = &the_reference - the_array;
如果你不确定该元素是否是数组的一部分,那么这样做可能是未定义的行为。
没有(标准认可的)方法来告诉你有指针或引用的对象是数组的一部分。因此,如果您无法访问数组,或者不确定它是哪个数组,那么您就不幸了。
答案 1 :(得分:0)
如果数组的地址可用,则可以使用指针算法。
int t[3] = { 1, 2, 3 };
int *p = t + x; /* Where `x` is the given offset */
然后:
#include <stddef.h>
ptrdiff_t y = p - t;
接下来,y
应该等于x
。